Oracle中ROWNUM小于条件生效,大于条件无结果的问题咨询
问题原因解析
这是Oracle中ROWNUM伪列的特性导致的,核心逻辑如下:
- ROWNUM是Oracle在返回结果集的过程中逐行分配的序号,从1开始递增。
- 只有当某一行被分配了ROWNUM=1并满足筛选条件时,Oracle才会继续为下一行分配ROWNUM=2,以此类推。
- 当你使用
ROWNUM > 200作为筛选条件时,第一行的ROWNUM是1,不满足>200的条件,不会被纳入结果集。由于没有行被选中,Oracle不会继续为后续行分配ROWNUM,最终整个查询就没有返回结果。
如果想要获取第201行及以后的数据,需要先给ROWNUM指定别名,让Oracle先完成所有行的序号分配,再进行筛选,示例SQL如下:
select * from ( select t1.*, ROWNUM as rn from (select * from myTable where fk = 1234) t1 ) where rn > 200;
内容的提问来源于stack exchange,提问作者Nila
相关产品推荐
相关产品推荐

