【问题标题】:Select by row in Oracle在 Oracle 中按行选择
【发布时间】:2020-05-07 22:09:22
【问题描述】:

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

这是我想出的 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。我会再次检查是否有默认列作为排序依据。

有没有不需要订单的方法来写这个?大多数数据库本质上是顺序的,因为新数据被写入其中。因此,我需要在创建时逐行提取(表中没有数据可供我比较或排序)将其视为日志文件,不仅仅是一个数据库。我收到一封电子邮件,告诉我数据中有一行失败,我需要能够找到准确的行,因为它落在数据库中以找出失败的原因。

【问题讨论】:

  • 为什么不用窗口函数row_number()然后逐行选择呢?
  • 你知道,“@”在oracle中是无效的

标签: sql oracle syntax


【解决方案1】:

甲骨文有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 行这样的东西。 something 排序时只有第 78 行。 ? 用于指定排序的列。

【讨论】:

    猜你喜欢
    • 2011-05-24
    • 2016-11-21
    • 2017-01-03
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多