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官網:
總結
以上是生活随笔為你收集整理的oracle使用唯一结果集,oracle分页查询结果集重复问题解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle创建表需要注意什么,Orac
- 下一篇: oracle sga 4031,Orac