oracle 分頁 數據重複 數據不正確


oracle 通常分頁的寫法爲sql

select a.id,a.title,rownum as rn,a.create_time from 
                   (select a.* from temp a order by create_time desc) a  where rownum<=20

注意:我用的是 create_time 來進行排序 create_time 中有相等的oracle

爲了對比分頁數據的差別我用left join 來看數據是否正常spa

這個是用的一個分頁 我用了關聯來對比分20條數據和10的數據之間的差別code

select a.title,a.rn,b.title,b.rn from 
           (select a.id,a.title,rownum as rn,a.create_time from 
                   (select a.* from temp a order by create_time desc) a  where rownum<=20) a
   left join
           (select a.id,a.title,rownum as rn,a.create_time from 
                   (select a.* from temp a order by create_time desc) a  where rownum<=10) b
 on a.id=b.id

執行結果orm

按道理是右邊前面10條會和左邊前面10條數據同樣 可是運行後是不同的 排序

果這樣的話 會有在翻頁鍾可能出現一條記錄會在多個頁面出現的現象 甚至多個頁面數據同樣圖片

sql調整後 在嵌套一層it

select a.* from 
           (select a.id,a.title,rownum as rn,a.create_time from 
                   (select a.* from temp a order by create_time desc) a) a  where a.rn<=20
select a.title,a.rn,b.title,b.rn from 
   (select a.* from 
           (select a.id,a.title,rownum as rn,a.create_time from 
                   (select a.* from temp a order by create_time desc) a) a  where a.rn<=20) a
   left join
   (select a.* from 
           (select a.id,a.title,rownum as rn,a.create_time from 
                   (select a.* from temp a order by create_time desc) a) a  where a.rn<=10) b
 on a.id=b.id

執行結果對比class

這樣結果 就對的上了select


有沒有發現雖然是相同的sq 套了一層select後結果集都變了 先後兩張圖片的 左列結果都不是同樣的



總結  我這裏用的時間排序 其中時間相等的數據不少 若是排序字段惟一 應該不會有這種問題出現

相關文章
相關標籤/搜索