架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 14058|回复: 2

[资料] Oracle分页查询排序数据重复问题

[复制链接]
发表于 2017-9-20 09:52:47 | 显示全部楼层 |阅读模式

在项目开发过程中大量的使用了分页查询,当想要让数据按照日期排序时,出现了很多重复的数据出现。

造成这一问题出现的原因是:在数据中,日期的值不是唯一的。

我们知道

Oracle的分页查询是没有进行任何排序操作的,Oracle是顺序的从数据块中读取符合条件的数据返回到客户端。

而Oracle的排序算法不具有稳定性,也就是说,对于键值相等的数据,这种算法完成排序后,不保证这些键值相等的数据保持排序前的顺序。

解决这一问题的方法就是在后边增加一个唯一性列,比如主键,问题解决。



或者






上一篇:给大家推荐几款好用的国外ip代理吧。
下一篇:.net/c# 发送带附件的邮件程序下载
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2017-9-25 16:00:51 | 显示全部楼层
oracle中rownum和row_number()区别
http://www.itsvse.com/thread-4107-1-1.html
(出处: 架构师)
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2017-9-25 16:02:34 | 显示全部楼层
rownum是在where条件过滤之后,在任何排序(order by)或聚集(aggregation)之前赋给行的。同时,只有当rownum被分配给行后才会递增。rownum的初始值为1。rownum在查询中产生后就不再变化:
select * from emp where ROWNUM <= 5 order by sal desc;
该语句的目的是想返回top 5薪水最高的员工信息,但根据rownum的产生原理,rownum在order by之前就已经产生,所以该语句并不能起到top 5的作用,正确的语法如下:
select * from (select * from emp order by sal desc) where ROWNUM <= 5;
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2025-6-16 03:31

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表