使用rownum分頁排序奇怪現象一則:前後幾次查詢資料不一樣
1.環境:建立一個表
create table test (id number, buydate timestamp);
begin
for i in 1..10 loop
insert into test values(i,sysdate);
end loop;
end;
select * from test;
1 22-AUG-17 03.19.15.000000 PM
2 22-AUG-17 03.19.15.000000 PM
3 22-AUG-17 03.19.15.000000 PM
4 22-AUG-17 02.19.15.000000 PM
5 22-AUG-17 03.19.15.000000 PM
6 22-AUG-17 03.19.15.000000 PM
7 22-AUG-17 03.19.15.000000 PM
8 22-AUG-17 04.19.15.000000 PM
9 22-AUG-17 03.19.15.000000 PM
10 22-AUG-17 03.19.15.000000 PM
使用rownum分頁排序sql語句如下:
--1
SELECT *
FROM ( SELECT P.*, ROWNUM AS RN
FROM (SELECT *
FROM TEST
WHERE 1 = 1
ORDER BY buydate DESC) P )
where rn >4 and rn <=6 ;
--2
SELECT *
FROM ( SELECT P.*, ROWNUM AS RN
FROM (SELECT *
FROM TEST
WHERE 1 = 1
ORDER BY buydate DESC) P where rownum <= 6 )
where rn >4;
3. 兩個語句查詢出的結果不一樣,而且有時候還會有變化。
4.分析後可以知道,看上面資料:以buydate 來排序,但是buydate 有幾行資料時間一樣。那麼資料庫就會隨機給出一個順序。因此,兩個語句得出不一樣的順序。分頁取得資料就不一樣了。其實兩條語句效果是一樣的。那要怎麼改寫,才能讓分頁取資料,前後幾次查詢的資料絕對一樣呢?關鍵在排序欄位。如果buydate,沒有重複,就可以了啦。
create table test (id number, buydate timestamp);
begin
for i in 1..10 loop
insert into test values(i,sysdate);
end loop;
end;
select * from test;
1 22-AUG-17 03.19.15.000000 PM
2 22-AUG-17 03.19.15.000000 PM
3 22-AUG-17 03.19.15.000000 PM
4 22-AUG-17 02.19.15.000000 PM
5 22-AUG-17 03.19.15.000000 PM
6 22-AUG-17 03.19.15.000000 PM
7 22-AUG-17 03.19.15.000000 PM
8 22-AUG-17 04.19.15.000000 PM
9 22-AUG-17 03.19.15.000000 PM
10 22-AUG-17 03.19.15.000000 PM
--1
SELECT *
FROM ( SELECT P.*, ROWNUM AS RN
FROM (SELECT *
FROM TEST
WHERE 1 = 1
ORDER BY buydate DESC) P )
where rn >4 and rn <=6 ;
--2
SELECT *
FROM ( SELECT P.*, ROWNUM AS RN
FROM (SELECT *
FROM TEST
WHERE 1 = 1
ORDER BY buydate DESC) P where rownum <= 6 )
where rn >4;
3. 兩個語句查詢出的結果不一樣,而且有時候還會有變化。
4.分析後可以知道,看上面資料:以buydate 來排序,但是buydate 有幾行資料時間一樣。那麼資料庫就會隨機給出一個順序。因此,兩個語句得出不一樣的順序。分頁取得資料就不一樣了。其實兩條語句效果是一樣的。那要怎麼改寫,才能讓分頁取資料,前後幾次查詢的資料絕對一樣呢?關鍵在排序欄位。如果buydate,沒有重複,就可以了啦。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30393770/viewspace-2143953/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 查詢與插入資料使用rownum與level
- JSP怎樣將查詢的資料實現分頁操作JS
- 百億級資料分表後怎麼分頁查詢?
- 百億級資料 分庫分表 後怎麼分頁查詢?
- 一次分頁查詢的優化優化
- MySQL分組查詢後獲取前N條資料MySql
- elasticsearch查詢之大資料集分頁查詢Elasticsearch大資料
- 分頁查詢的排序問題排序
- redis實現像關係型資料庫一樣按條件高效查詢分頁Redis資料庫
- 分頁查詢的排序問題(二)排序
- 分庫分表後的分頁查詢
- 一次奇怪的StackOverflowError問題查詢之旅Error
- indexdb實現分頁查詢Index
- 同樣網路結構,不一樣的推理速度?--記一次奇怪的踩坑
- 資料庫全表查詢之-分頁查詢優化資料庫優化
- MongoDB之資料查詢(分頁顯示)MongoDB
- oracle 資料分頁查詢 (轉貼收集)Oracle
- Oracle資料庫中的分頁查詢Oracle資料庫
- 資料庫排序查詢資料庫排序
- WriteFile 奇怪的現象
- http://www.hzoes.com/ rowid與rownum不一樣HTTP
- oracle sql分頁查詢(一)OracleSQL
- 實現分頁顯示資料[並按關鍵字查詢]
- elasticsearch查詢之大資料集分頁效能分析Elasticsearch大資料
- MongoDB之資料查詢(資料排序)MongoDB排序
- oracle 使用rownum進行分頁的陷阱Oracle
- MySQL全面瓦解9:查詢的排序、分頁相關MySql排序
- Oracle分頁查詢語句(一)Oracle
- 分頁實現前臺後臺不同效果,分頁類引入
- Logtail:像查詢資料庫一樣查詢日誌AI資料庫
- 基於MSSQLSQL資料庫大批次資料的分塊分頁查詢SQL資料庫
- 查詢前50%的資料
- Rownum分頁故障解決一例
- 利用rownum分組排序去重排序
- c# winform 實現分頁查詢C#ORM
- SSM框架實現分頁查詢例子SSM框架
- MYSQL SQLServer分頁查詢的實現MySqlServer
- 氣象資料查詢平臺設計