Oracle 分頁資料重複的問題

2022-07-19 20:45:25 字數 1092 閱讀 9749

oracle分頁採用三層巢狀+rownum分頁時,如果有order by,就會有乙個小坑,一不留神就掉進去了。

前置條件:分頁指令碼中存在order by

問題暴露:分頁時好時壞

問題本質:order by 在相同的資料下,排序具有不確定性

補充:如果有分析函式的情況按照具體情況處理,不可千篇一律

搬磚:今天公司系統中的乙個分頁的介面出現了重複資料的問題,檢查之後確認前端分頁控制項及後台的sql語句都沒有問題且該錶也沒有存在重複的資料記錄。在繼續分析之後發現是由於排序的字段出現大批的重複值造成的。

例如以下語句中,order_column列並不能確定其唯一性,那麼oracle在每次執行排序時並不能確定資料的唯一性,導致同樣的排序順序但是每次執行時並不能保證得到一樣的結果。

[sql] view plain

copy

select  

*   

from  

( select  

row_.*,  

rownum rownum_   

from  

( select  

*  from  t  

order by  

order_column ) row_   

where  

rownum <= 10  

)   

where  

rownum_ > 20  

有以上的結論之後處理方法也就簡單明瞭了,order by中的字段必須能夠確保唯一即可:

[sql] view plain

copy

select  

*   

from  

( select  

row_.*,  

rownum rownum_   

from  

( select  

*  from  t  

order by  

order_column ,rowid) row_   

where  

rownum <= 10  

)   

where  

rownum_ > 20  

資料庫分頁,資料重複問題

問題描述 查詢資料分頁時,查詢的資料有時候前一頁和後一頁的資料會有重複問題 當sql中order by待排序字段值相同時,系統對資料的排序可能變得隨機,即一會兒這條資料在前面,一會兒這條資料在後面了 所以當翻頁的時候我們很容易便看到了重複的資料。sql中order by相同值結果亂序的具體原因 查閱...

oracle分頁查詢資料重複問題

在oracle分頁查詢中,我們採用類似以下所示的公認的比較高效的資料庫分頁查詢語句 effective oracle by design中有描述 眾多oracle使用者也做過測試 寫道 select from select a.rownum rn from select from table nam...

oracle分頁查詢資料重複問題

現在公司做的管理系統中有很多資料,往往需要分頁查詢,以前系統中出現了分頁資料重複的現象,起初以為是入的測試資料中有重複的,所以沒有深入分析,今天重新入了新的資料,進行分頁查詢,發現大多數的頁面都會存在與其他頁面的重複的資料,就開始排查,先從 上進行,沒有問題,構造的sql語句也沒有問題,將sql語句...