oracle 分页查询 排序问题,order by 与 rownum执行

sql例子如下

正常业务查询根据 创建时间排序查询
SELECT * FROM SHWZ_JHSB_THREEON_PROJECT WHERE PROJECTTAG = '三上' ORDER BY CREATETIME DESC;
执行查询结果如下图
图1png
查询第一页 不加rownum排序的分页查询
--SELECT * FROM (SELECT * FROM SHWZ_JHSB_THREEON_PROJECT WHERE PROJECTTAG = '三上' ORDER BY CREATETIME DESC) WHERE ROWNUM <= 15;
执行查询结果如下图、排序结果与图1的顺序不一致
图2.png
查询第一页 加rownum排序的分页查询
select *  from (select t.*,rownum  from  (SELECT * FROM SHWZ_JHSB_THREEON_PROJECT WHERE PROJECTTAG = '三上' ORDER BY CREATETIME DESC) t  order by rownum) where rownum < 15 ;
执行查询结果如下图、排序结果与图1的顺序一致
图3.png
查询多页 不加rownum排序的分页查询
SELECT * FROM ( SELECT ROW_.*, ROWNUM ROWNUM_ FROM (SELECT * FROM SHWZ_JHSB_THREEON_PROJECT WHERE PROJECTTAG = '三上' ORDER BY CREATETIME DESC) ROW_ WHERE ROWNUM <= 30) WHERE ROWNUM_ > 15
执行查询结果如下图、排序结果与图1的顺序不一致
图4.png
查询多页 加rownum排序的分页查询
SELECT * FROM ( SELECT ROW_.*, ROWNUM ROWNUM_ FROM (select ROW__.*,rownum  from  (SELECT * FROM SHWZ_JHSB_THREEON_PROJECT WHERE PROJECTTAG = '三上' ORDER BY CREATETIME DESC) ROW__  order by rownum) ROW_ WHERE ROWNUM <= 30) WHERE ROWNUM_ > 0
执行查询结果如下图、排序结果与图1的顺序一致
图5.png

总结

有指定排序的字段,需要在sql外面套一层 根据rownum 的排序查询,再进入分页的查询

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容