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

时间:2012-11-12 20:47:48

标签: sql database oracle join oracle11g

  

可能重复:
  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;

由于

1 个答案:

答案 0 :(得分:7)

仅在获取行并评估其他谓词之后评估rownum。这是关键。所以,如果你说 选择 *   从表中rownum> = 2;

它永远不会起作用,因为它像

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

如果您从>开始请求rownum 1然后它永远不会真实。如果您需要编写像

这样的代码,请进行分页
select *
  from (select rownum r, t.*
          from your query tables
         order by ..)
 where r>=101 
   and rownum <= 400

另请参阅ask tom