我有一个查询
select * from tablename where rownum =1;
此查询提供了所需的结果,但如果我运行
select * from tablename where rownum=2;
然后此查询给出null结果。 知道为什么吗?
答案 0 :(得分:5)
由于ROWNUM的分配方式,谓词WHERE rownum=2
永远不会成立。例如,如果表中有5行,则算法类似于
由于结果集中没有“第一行”,因此不能有“第二行”。您可以在不等式比较中使用ROWNUM,即
SELECT *
FROM table_name
WHERE rownum <= 2
将返回2行。
如果您尝试识别表格中的“第二行”,则可能需要类似
的内容SELECT *
FROM (SELECT t.*,
rank() over (order by some_column) rnk
FROM table_name)
WHERE rnk = 2
答案 1 :(得分:1)
我不认为这是一个定义明确的查询:
ROWNUM是一个伪列,它返回结果中行的位置 组。 ROWNUM在记录后进行评估 从数据库中选择 在执行ORDER BY之前 子句。