700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > oracle使用唯一结果集 oracle分页查询结果集重复问题解决方法

oracle使用唯一结果集 oracle分页查询结果集重复问题解决方法

时间:2024-08-21 05:34:42

相关推荐

oracle使用唯一结果集 oracle分页查询结果集重复问题解决方法

做项目时,无意间发现了分页上的一个bug,在此记录一下:

首先手动将后台输出的sql语句复制进oracle中查看,以便排查错误,对比以下视图前10条的结果集与10到20条的结果集,发现大部分记录出现重复现象,SQL语句如下:

--前10条记录

select*

from(selectrow_.*,rownumrownum_

from(selectt.idcard,count(1)

fromsampling.v_unvoucher_blacklistt

where1=1

groupbyt.idcard

orderbycount(1)asc)row_

whererownum<=10)

whererownum_>0;

--第11条-第20条记录

select*

from(selectrow_.*,rownumrownum_

from(selectt.idcard,count(1)

fromsampling.v_unvoucher_blacklistt

where1=1

groupbyt.idcard

orderbycount(1)asc)row_

whererownum<=20)

whererownum_>10;

出现以上错误时,先是反复增加/删除where之后的条件,不断测试,貌似发现了一些端倪,错误记录都发生在count(1)的值相同时,于是在网上好一阵搜索,可还是没有找到解决办法;

没办法了,最后还是硬着头皮去找官网的一些demo,从中观察用法,探索者、摸索着,就有了以下的版本,经测试可以返回正确结果集,修改后如下:

select*

from(selectrow_1.*,rownumrownum_

from(select*from(selectt.idcardidcard,count(1)total

fromsampling.v_unvoucher_blacklistt

where1=1

groupbyt.idcard)

orderbytotal,rownumasc)row_1

whererownum<=10)

whererownum_>0;

总结:order by语句应当遵循条件唯一性原则,否则oracle不保证每次查询的结果集都相同。

详细介绍请参考oracle官网:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。