oracle+视图分页重复,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官网:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值