场景:获取待处理表按时间排序后前N条待处理记录
错误写法:select * from table_name where status = '0' and rownum <= 100 order by upd_time; --满足条件的记录取前100条后结束扫描,在排序这个结果集,功能未能实现;
正确写法:select * from (select * from table_name where status = '0' order by upd_time) where rownum <= 100; --获取满足条件的结果集,在排序,在取前100条记录
ROWNUM使用的几个注意点:
对于ORACLE的rownum问题,
假设表 t1(c1) 中有20条记录,
select rownum, c1 from t1 where rownum > 10;(如果你写下这个SQL,在你的头脑中因该是想得到表中后10条记录),运行SQL后显示出的结果会令你失望,也许您可能会怀疑有人删掉了后面的10条记录,然后查看记录数仍为 20 条?那问题出在哪里啊???
先好好理解rownum的意义吧,rownum是结果集的一个伪列,既先查到一个结果集之后,再加上的一个列 rownum(伪列),(强调:先结果集),简单的说,就