昨天,與外部化系統對接時,發現有乙個資料一直咩有整合到,雙方各自排查了自己系統的**,都覺得邏輯非常簡單,無法就是乙個分頁查詢而已。
問題就出在這個分頁查詢上。
為了說明當時問題發生的情景,我模擬了乙個sql查詢:
以上是一段典型的oracle資料庫的分頁查詢,又以查詢結果集的第1條至第800條資料。
如果想查詢第二頁的資料,只需要改到rn和rownum即可。以下是查第二頁的資料的sql:
問題背景
上述sql中從my_table查詢結果集本身是沒有問題的,因為符合條件的資料總數是不會變的。但是有乙個問題,從my_table查詢的結果集是沒有做排序的,意味著每次查詢的資料的位置可能發生變化。由於分頁查詢,其實是從my_table查詢查詢了多次,每次資料的位置不確定,導致查詢出來的結果,有可能查得出來,有可能查詢重複。這就是問題的根源。
解決方案
知道問題所在解決起來就簡單了,就是加排序。讓每次查詢出來的資料按到固定位置查出來就沒有了。以下是示例:
一般來說,排序的字段最好是唯一值。如果是非唯一的字段,那麼最好用多個能確定唯一性的字段來實現排序也是可以的。否則無法啟動排序的效果,問題還是會出現。
angular js 新增 排序 查詢
lang en charset utf 8 titletitle table tdstyle src script scope.data scope.search scope.search2 scope.watch search function value else 選擇排序部分 scope.so...
mysql 查詢排序 分頁查詢
1.排序 排序方式 說明asc 按公升序排列 預設 desc 按降序排序 1.按age排序 select from students order by age 2.按age降序,若age相同,按height降序排序 select from students order by age desc hei...
Spring Data Jpa 分頁 排序查詢
spring data jpa對於分頁以及排序的查詢也有著完美的支援,通過pageable來對資料庫進行分頁查詢。介面blogrepository的定義如下 public inte ce blogrepository extends pagingandsortingrepository blogre...