今天在工作中,在service中調用分頁查詢列表介面的時候,返回的到頁面的數據中總是存在缺失的數據,還有重覆的數據。後發現是order by導致的 ...
問題:今天在工作中,在service中調用分頁查詢列表介面的時候,返回的到頁面的數據中總是存在缺失的數據,還有重覆的數據。
分析:select * from (select ROWNUM rn,t.* from (select * from student order by class) t where ROWNUM <![CDATA[<]]>#{1.endIndex}) where rn <![CDATA[>=]]>#{1.startIndex}
當endIndex為3和為5的時候ROWNUM發生了變化
id |
student |
class |
rownum |
1 |
zhao |
2 |
1 |
2 |
qian |
2 |
2 |
3 |
li |
2 |
3 |
id |
stuent |
class |
rownum |
1 |
zhao |
2 |
1 |
3 |
li |
2 |
2 |
4 |
song |
2 |
3 |
2 |
qian |
2 |
4 |
5 |
yang |
2 |
5 |
在上表中qian 和li 的rownum發生了變化
總結:oracle分頁語句中:
1 不存在order by 則系統根據rowid來排序
2 若存在order by 則order by 後面的限制的列必須要能確定唯一,或者最小粒度的列能確定唯一(如id列)如上class都相同,則可以加上
order by class,id 或者 order by class,rowid