数据库分页时order by排序不唯一,分页出现重复数据问题
来源:互联网 发布:陕西师范远程网络教育 编辑:程序博客网 时间:2024/05/17 03:51
前些天出现了一个非常有意思的问题,sql简单化出来以后是下面这个样:
select * from(SELECT tmp_page.*, rownum row_id FROM ( SELECT * FROM T_BAP_MEC_TZERO_STL ORDER BY dt_ute desc nulls last)tmp_page WHERE rownum<10)where row_id>0
出现的问题是前面几页的数据几乎一样
那么为什么会导致这样的问题出现呢?
为了重现问题我重现建立了一张表方便缩小研究范围,排除非影响因素
create table ttt1 (a varchar2(3),b number);insert into ttt1 values('a',1); insert into ttt1 values('b',1); insert into ttt1 values('c',1); insert into ttt1 values('d',1); insert into ttt1 values('e',1); insert into ttt1 values('f',1); insert into ttt1 values('g',1); insert into ttt1 values('h',1); insert into ttt1 values('i',1); insert into ttt1 values('j',1);insert into ttt1 values('k',1); insert into ttt1 values('l',2); insert into ttt1 values('m',3); insert into ttt1 values('m1',3); insert into ttt1 values('m2',3); insert into ttt1 values('m3',3); insert into ttt1 values('m4',3); insert into ttt1 values('m5',3); insert into ttt1 values('m6',3); insert into ttt1 values('m7',3); insert into ttt1 values('m8',3); insert into ttt1 values('m9',3); insert into ttt1 values('m10',3);insert into ttt1 values('m11',3);insert into ttt1 values('m12',3);insert into ttt1 values('m13',3); insert into ttt1 values('n',null); insert into ttt1 values('o',null); insert into ttt1 values('p',null); insert into ttt1 values('k',null); insert into ttt1 values('r',null); insert into ttt1 values('s',null); insert into ttt1 values('t',null); insert into ttt1 values('u',null); insert into ttt1 values('v',null); insert into ttt1 values('w',null);
SELECT tmp_page.*, ROWID FROM ( SELECT * FROM ttt1 order by b desc )tmp_page WHERE rownum<=5SELECT tmp_page.*, ROWID FROM ( SELECT * FROM ttt1 order by b desc )tmp_page WHERE rownum<=10select * from( SELECT tmp_page.*, ROWID FROM ( SELECT * FROM ttt1 order by b desc )tmp_page WHERE rownum<=5 )where row_id>0;select * from( SELECT tmp_page.*, rownum row_id FROM ( SELECT * FROM ttt1 order by b desc )tmp_page WHERE rownum<=10 )where row_id>5;1.这样你就能缩小答案范围在rownum取值这里,因为第一次取记录数5条的时候,k在第5位,而第二次k排在了第6位,所以第一页和第二页都出现了k记录。
2.在转换一下:
当你order by 不能保证唯一性的时候,rownum是怎么去选择前5条记录的呢?为什么不是
SELECT a,b,rowid FROM ttt1 order by b desc的前5条记录呢?那么到底是rownum还是order by 导致的最终问题呢?
如果是升序的还好,他会根据物理存放顺序来取数据,但是倒序的话很明显变成的随机性,这里假设
阅读全文
0 0
- 数据库分页时order by排序不唯一,分页出现重复数据问题
- mysql分页出现重复数据-order by
- mysql 5.6 order by limit 排序分页数据重复问题
- mysql 5.6 order by limit 排序分页数据重复问题
- order by 导致分页数据重复问题
- order by 导致分页数据重复问题
- 【mysql】order by limit分页数据重复问题
- Oracle数据库order by排序查询分页比不分页还慢问题解决办法
- Oracle中的order by分页排序问题
- Oracle Order By后导分页数据重复问题解决办法。
- Oracle Order By后导分页数据重复
- oracle进行order by,排序字段值相同时,导致分页数据出现相同,加入rowid的解决方法
- oracle分页排序出现重复数据
- oracle 分页 order by 问题
- hql 分页出现数据重复问题
- oracle分页查询出现数据重复问题
- Oracle分页查询排序数据重复问题
- Oracle分页查询排序数据重复问题
- linux 一些基本文件操作
- java中unicode utf-8以及汉字之间的转换工具类
- 计算机组成学习笔记1.1
- 学习笔记20170704
- Oracle总结第一篇【基本SQL操作】
- 数据库分页时order by排序不唯一,分页出现重复数据问题
- hibernate笔记02 Hibernate入门
- 史上最全语言列表
- ART运行时Java堆创建过程分析
- centos7 安装部署 jdk1.8.0_131
- MySQL的日期函数
- MySql存储过程与函数
- 启动服务出现错误193: 0xc1时的处理方法
- 实现滑动菜单栏demo