中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

oracle分頁查詢結果集重復問題&解決方法

發布時間:2020-08-10 11:26:20 來源:網絡 閱讀:1941 作者:GeeYL 欄目:關系型數據庫

做項目時,無意間發現了分頁上的一個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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新余市| 都匀市| 隆尧县| 资溪县| 巴林左旗| 油尖旺区| 西畴县| 梨树县| 上林县| 基隆市| 农安县| 永丰县| 衡南县| 关岭| 盐城市| 遵义县| 壶关县| 邳州市| 进贤县| 昌邑市| 塘沽区| 托里县| 桑日县| 万山特区| 工布江达县| 珲春市| 泗洪县| 新河县| 黎平县| 莒南县| 古交市| 静海县| 贵州省| 乌兰浩特市| 垣曲县| 潍坊市| 额敏县| 瑞金市| 洛南县| 涿州市| 延寿县|