如果rownum的值大于100,则表rownum返回0记录

zig*_*ggy 2 sql database oracle join oracle11g

可能重复:
Rownum无法使用查询

我正在运行一些测试如何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);
Run Code Online (Sandbox Code Playgroud)

查询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;
Run Code Online (Sandbox Code Playgroud)

查询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;
Run Code Online (Sandbox Code Playgroud)

谢谢

Daz*_*zaL 7

rownum仅在获取行并评估其他谓词之后进行评估.这是关键.所以如果你说select from from table where rownum> = 2;

它永远不会工作,因为它的工作原理

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

如果你从> 1开始请求rownum那么它永远不会是真的.如果你需要你需要代码,做分页

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

请问汤姆