在Oracle中按行选择

问题描述 投票:0回答:1

我知道这是不常规的,但我需要按行号选择数据(因为这是错误报告给我们的反馈)。

这是我想出的SQL,但它不工作。我确实从一个MYSQL查询开始,那确实有效,并通过一个转换器,因为我对Oracle的语法不是很了解。

SELECT * 

FROM (
    SELECT ACCOUNTID, ACCOUNT_SSN, AGENTCODEID, @curRow := FROM dual @curRow + 1 AS row_number
FROM 
    agent_code_details_stage_0808    
    JOIN (
        SELECT <<@curRow>> = 0
    ) r
) sub

WHERE sub.row_number = 78 or 
sub.row_number = 277

更新:当我们打开表时,没有指定 "顺序",但系统显示的是行号。我相信我们使用的是SQL Developer。我再检查一下,看看是否有一个默认的列,它的排序。

有没有一种方法可以不需要顺序就能写出来?大多数数据库都是固有的顺序,因为新的数据被写入它。因此,我需要按创建时的行来拉(表中没有数据供我比较或排序),把它看作是一个日志文件,而不是数据库。我收到一封电子邮件,告诉我数据中有一行失败了,我需要能够在DB中找到那行,以找出失败的原因。

sql oracle syntax
1个回答
2
投票

Oracle有 row_number():

SELECT acd.*
FROM (SELECT acd.*,
             ROW_NUMBER() OVER (ORDER BY ?) as seqnum
      FROM agent_code_details_stage_0808 acd 
    ) acd
WHERE sub.row_number IN (78, 277);

有一点需要注意的是,SQL表代表的是: 无序 集。 一般来说,在SQL表中是没有第78行这回事的。 当按以下方式排序时,只有第78行。东西. 该 ? 是为指定排序的列。

© www.soinside.com 2019 - 2024. All rights reserved.