rownum 与order by 的执行顺序及按rownum 排序
如果select语句(非嵌套查询形式的)有order by子句,则order by子句一般都是最后一步执行的。但是如果order by子句里的字段被设置了主键约束或是被设置索引了,那么order by子句执行之后,oracle系统还会重新对结果集的rownum值进行编号。
上图看出,P_WEIGHT是降序并有序的。而rownum是无序的。
下图,加了rownum<=0后,按P_WEIGHT 降序,P_WEIGHT的最高值也没了
解决方案:1,将P_WEIGHT设为主键,显然此方法不可能,如果是按主键id排序,就没有此问题了
2.嵌套查询:
select ROWNUM,P_WEIGHT from
(select ROWNUM,D.P_WEIGHT from T_SYS_POI D where D.P_STYLE = '002' ORDER BY D.P_WEIGHT desc)
where ROWNUM<=10
而嵌套查询方法相比之下拥有较高的效率,主要体现在WHERE ROWNUM <= 10这句上
本文原创,转载必追究版权。