【问题标题】:Table rownum returns 0 records if rownum is tested for value greater than 100 [duplicate]如果测试rownum的值大于100,则表rownum返回0条记录[重复]
【发布时间】:2012-11-01 07:48:50
【问题描述】:

可能重复:
Rownum not working with query

我正在对rownum 的工作原理进行一些测试。请有人解释以下查询的输出 - 特别是为什么第三个查询返回 0 行。

查询 1 - 返回 2456 行

Select rownum, s.id, s.title, sv.version_id
from software s JOIN software_version sv on (s.id = sv.id);

查询 2 - 返回 100 行

Select rownum, s.id, s.title, sv.version_id
from software s JOIN software_version sv on (s.id = sv.id)
where rownum between 1 and 100;

查询 3 - 返回 0 行

Select rownum, s.id, s.title, sv.version_id
from software s JOIN software_version sv on (s.id = sv.id)
where rownum between 101 and 400;

谢谢

【问题讨论】:

标签: sql database oracle join oracle11g


【解决方案1】:

rownum 仅在获取行并评估其他谓词之后才评估。那是关键。所以如果你说 选择 * 来自 rownum >= 2 的表;

它永远无法工作,因为它像这样工作

open cursor loop
  fetch row (rownum is evaluated as the last thing here)
    if fetched then rownum = rownum + 1
end cursor

如果您从 > 1 开始请求 rownum,那么它永远不会为真。如果你需要做分页,你必须像这样编码

select *
  from (select rownum r, t.*
          from your query tables
         order by ..)
 where r>=101 
   and rownum <= 400

也可以在ask tom阅读更多内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 2018-05-22
    相关资源
    最近更新 更多