在項目開發過程中使用了大量的分頁查詢,當進行排序的字段的值不唯一時,會導致查詢出很多重復的數據,導致分頁失效。比如按新建日期進行排序,由於日期的值不是唯一的,Oracle的分頁查詢時沒有進行任何排序操作的,Oracle是順序的從數據塊中讀取符合條件的數據返回到客戶端,而Oracle的排序算法不具有穩定性,也就是說,對於鍵值相等的數據,這種算法完成排序后,不保證這些鍵值相等的數據保持排序前的數據,解決這一問題的方法就是在后邊增加一個唯一性列,比如主鍵。
select * from ( select a.*, rownum rn from ( select * from user u order by u.createdate desc, u.id desc ) a where rownum <=20 ) b where b.rn >=0
摘抄與:http://m.itboth.com/d/i22eAb/oracle