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後結果集都變了 先後兩張圖片的 左列結果都不是同樣的
總結 我這裏用的時間排序 其中時間相等的數據不少 若是排序字段惟一 應該不會有這種問題出現