我正在运行一些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;
由于
答案 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