我有一個查詢,其末尾有rownum >=15
。
當我運行這個查詢時,這顯示了正確的結果,這意味着它的結果顯示了所有15行,並且所顯示行的順序沒有變化。結果示例順序如下:1,2,3,
但是,當我從查詢中刪除rownum >=15
時,結果不會按順序顯示1,2,3,而是顯示順序1,3,2。
來自你們的任何想法都會對我解決這個問題很有幫助。Rownum導致結果以無序方式顯示結果
回答
這是來自很多人的持久查詢。
此類行爲的原因可以分析如下。
您的數據庫必須在串行模式。
Oracle文檔說:
Oracle數據庫數據插入表中的兩種方法之一:
串行模式:在常規INSERT操作,數據庫重用自由空間該表將新插入的數據與現有數據交錯。
並行模式:在直接路徑INSERT操作期間,數據庫將插入的數據追加到表中的現有數據之後。現有數據中的可用空間不被重用,並且參照完整性約束被忽略。這些程序相結合可以提高性能。
在常規模式中,以下記錄
insert into users
values(1, 'Elvis'), (2, 'Jackson'), (3, 'Madonna');
可以結果在下面的存儲的次序。
基本選擇會因此產生相同的結果。
2 Jackson
1 Elvis
3 Madonna
在直接路徑INSERT,數據被附加到表的末尾,而不是使用當前分配給表現有空間。
要強制使用直接路徑INSERT,我們使用/*+ APPEND */提示。
insert /*+ APPEND */ into users
values(1, 'Elvis'), (2, 'Jackson'), (3, 'Madonna');
這將在表的末尾附加的行。
基本選擇因此將按插入順序獲取記錄。
1 Elvis
2 Jackson
3 Madonna
但發生了什麼選擇了直接路徑模式之前添加的這些記錄?插入時它們存在於相同的位置。要解決這樣的問題,我們必須通過選擇使用任何下列順序:
- ROWID - 插入的行的地址標識。 (我的觀察是,每個表格都是順序的)。使用
order by rowid
。 - 收錄領域 - 比如,
order by user_id
- INDEX hint - 在合適的領域定義的索引,並使用此提示爲索引定義的順序獲取記錄。
上的數據,也沒有選擇,而是選擇了一個適當的排序解決方案和檢索。
插入行的順序與查詢返回的順序完全無關。這個答案唯一準確的部分是他們需要添加'order by'子句。 –
OP的懷疑是爲什麼如果沒有使用訂單,他們不按照插入順序返回? –
不知道你從哪裏得到這個想法Ravinder,OP只是詢問兩個查詢以及他們爲什麼以不同的順序返回結果。 –
- 1. ROWNUM混淆結果
- 2. 導引軌下方顯示SQL結果
- 3. 無法顯示結果
- 4. 無法顯示結果
- 5. 結果以單列顯示
- 6. 顯示SQL結果的最佳方式
- 7. 顯示結果
- 8. 顯示結果
- 9. 顯示結果
- 10. 顯示結果
- 11. 顯示結果
- 12. 顯示結果
- 13. 顯示結果
- 14. 顯示結果
- 15. NSFetchRequest以特定順序顯示結果
- 16. 紅寶石分析結果顯示不一致的結果
- 17. 顯示結果C++程序
- 18. 只顯示div,如果mysql結果顯示8個結果?
- 19. 空值導致NaN結果
- 20. 無序結果
- 21. 搜索結果(顯示更多結果)
- 22. 根據一列結果顯示結果
- 23. 查找結果不顯示結果
- 24. 線程顯示不一致結果
- 25. ROWNUM沒有顯示我需要的結果?
- 26. 爲什麼結果顯示結果加上以前的結果循環?
- 27. 顯示結果PHP
- 28. 顯示結果SELECT *
- 29. 不顯示結果
- 30. 顯示PHP結果
這是MySQL還是Oracle?你要從這個問題中解脫出來的就是「如果你想要訂購結果,可以使用'ORDER BY'」,這樣你就知道它在哪裏,但是如果你發佈了你的查詢,有人可以準確地指出你需要什麼樣的ORDER BY條款。 – Avarkx
如果你發佈樣本數據和你正在嘗試的查詢..這將是我們很容易幫助 – Sai
查詢太大,讓我看看我能否發佈它 – techy360