【问题标题】:select range of rows from a table从表中选择行范围
【发布时间】:2011-07-11 05:32:27
【问题描述】:

我有一个表 XYZ(ID 主键,名称)。该表有超过 10000 行。 我想一次处理 1000 行。为此,我必须从表中获取前 1000 行,然后根据结果更新表。对于前 1000 行,我可以使用

   select *  from XYZ where rownum >=1 and rownum <= 1000

但是对于接下来的 1000 行,我不知道如何编写查询,因为如果我写了

select count(*)  from XYZ where rownum >=1000 and rownum < 2000

查询给出 0 行。知道如何编写查询。请帮助。我使用的是 Oracle 11g 数据库。

【问题讨论】:

    标签: sql oracle11g


    【解决方案1】:

    rownum 不是真正的列,它是在生成行时生成的伪列,从 1 开始向上计数。

    所以,您的查询: select * from XYZ where rownum &gt;= 1000 and rownum &lt;= 2000

    不返回任何行。为什么? Oracle 生成第一行并为其分配一个 rownum 1。然后检查它是否应该包含在结果集中。 Rownum

    您需要引入一个子选择来将rownum 转换为一个真实的列:

    select * from
      (select rownum r, * from xyz) inner
    where
      inner.r >= 1000 and inner.r <= 2000
    

    为了得到你真正想要的结果。

    【讨论】:

    • 感谢唐尼您的回答。如果我使用此查询,它会被优化。因为我们首先提取 10000 行,然后从结果中选择 1000 行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2011-12-21
    • 2013-08-19
    • 1970-01-01
    • 2013-05-31
    相关资源
    最近更新 更多