oracle分页查询结果集重复问题&解决方法
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,做项目时,无意间发现了分页上的一个bug,在此记录一下:首先手动将后台输出的sql语句复制进oracle中查看,以便排查错误,对比以下视图前10条的结果集与10到20条的结果集,发现大部分记录出现重复
千家信息网最后更新 2026年10月31日oracle分页查询结果集重复问题&解决方法
做项目时,无意间发现了分页上的一个bug,在此记录一下:
首先手动将后台输出的sql语句复制进oracle中查看,以便排查错误,对比以下视图前10条的结果集与10到20条的结果集,发现大部分记录出现重复现象,SQL语句如下:
--前10条记录select * from (select row_.*, rownum rownum_ from (select t.idcard, count(1) from sampling.v_unvoucher_blacklist t where 1 = 1 group by t.idcard order by count(1) asc) row_ where rownum <= 10) where rownum_ > 0;--第11条-第20条记录select * from (select row_.*, rownum rownum_ from (select t.idcard, count(1) from sampling.v_unvoucher_blacklist t where 1 = 1 group by t.idcard order by count(1) asc) row_ where rownum <= 20) where rownum_ > 10;
出现以上错误时,先是反复增加/删除where之后的条件,不断测试,貌似发现了一些端倪,错误记录都发生在count(1)的值相同时,于是在网上好一阵搜索,可还是没有找到解决办法;
没办法了,最后还是硬着头皮去找官网的一些demo,从中观察用法,探索者、摸索着,就有了以下的版本,经测试可以返回正确结果集,修改后如下:
select * from (select row_1.*, rownum rownum_ from (select * from (select t.idcard idcard, count(1) total from sampling.v_unvoucher_blacklist t where 1 = 1 group by t.idcard) order by total,rownum asc) row_1 where rownum <= 10) where rownum_ > 0;
总结:order by语句应当遵循条件唯一性原则,否则oracle不保证每次查询的结果集都相同。
详细介绍请参考oracle官网:
http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
结果
语句
错误
相同
办法
条件
还是
测试
查询
不断
从中
原则
后台
唯一性
大部分
手动
无意间
是在
版本
现象
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司
哈尔滨大商圈互联网科技有限公司
广州百单互联网科技有限公司
科技股互联网
中国互联网科技股
港股互联网科技股
致聘互联网科技
广州善班互联网科技
郑州华宇互联网科技
上海亿帐通互联网科技
中国互联网金融科技基金
新华互联网科技校企合作
互联网巨头投资的硬核科技
互联网汽车科技小镇
昭通互联网科技选哪家
中科明德北京互联网科技
合肥互联网科技公司公章图片
银行科技岗属于互联网吗
深圳无忧互联网科技
科技和互联网行业的特点
精品咖啡豆
广州为想互联网科技有限公司
华宇互联网科技
互联网科技的未来发展
成都玖崟互联网科技有限公司乐商圈怎么样
阿里巴巴算科技企业还是互联网
欧洲十大科技互联网公司
宁夏众和广鑫互联网科技有限公司
互联网科技和信息
山东大美朱楼互联网科技有限公司