Oracle分頁查詢排序數據重復問題


參考資料:

  http://docs.oracle.com/database/122/SQLRF/ROWNUM-Pseudocolumn.htm#SQLRF00255

  http://blog.csdn.net/u010395242/article/details/52047341

在采用以下所示的方式:

SELECT *
  FROM (SELECT row_.*, rownum rownum_
          FROM (SELECT *
                  FROM table_name 
                  WHERE 1 = 1 
                  ORDER BY table_name.create_date) row_
         WHERE rownum <= 10) table_alias
 WHERE table_alias.rownum_ > 0

進行分頁查詢數據時,出現數據重復的現象,經查閱資料:

造成這一問題出現的原因是:在數據中,排序列值的不唯一性,也就是create_date的值不是唯一的。

在Oracle中:

Oracle的分頁查詢是沒有進行任何排序操作的,Oracle是順序的從數據塊中讀取符合條件的數據返回到客戶端。

而Oracle的排序算法不具有穩定性,也就是說,對於鍵值相等的數據,這種算法完成排序后,不保證這些鍵值相等的數據保持排序前的順序。

解決方法如下(兩個條件必須同時滿足): 
  1.sql語句中需要有排序條件。 
  2.排序條件如果沒有唯一性,那么必須在后邊跟上一個唯一性的條件,比如主鍵。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM