2014-11-04 52 views
0

我做了一個表像將選擇總是與第一(最早)記錄在表

record 
----------+ 
1 | one | 
----------+ 
2 | two | 
----------+ 
3 | three | 
----------+ 
4 | four | 
----------+ 
5 | five | 
----------+ 

開始沒有一個ID列,這些都只是行號我看到DBVisualizer工具中的每一行旁邊。我加入的順序1,2,3,4行,5這是」

SELECT 
    * 
FROM 
    sch.test_table limit 1; 

一定總是得到one,即與啓動‘最老’的記錄嗎?或者是將大型數據集這種變化?

+0

通過在查詢中添加一個ORDER BY來顯式執行它可能會更好。 – user3557327 2014-11-04 22:57:03

+1

如果您沒有提供ORDER BY子句,則服務器可以自由返回想要提供的任何行。如果你依賴於獲得最近的,請添加一個'ORDER BY'。 – 2014-11-04 22:57:29

+1

行沒有任何順序。如果您需要某個訂單,您可以使用'order by' – 2014-11-04 22:57:56

回答

2

沒有,按照SQL規範不使用order by時的順序是不確定的。你跟一組數據的工作,並集是沒有順序的。此外,集合的大小不應該的問題。

Postgresql documentation說:

如果未給出ORDER BY,則系統會以系統發現速度最快的順序返回行。

這意味着行可能按照預期順序返回,或者它們可能不會 - 無法保證。

底線是,如果你想確定性的結果,你必須使用order by

+0

在這個例子中,這不會給我一個按字母順序排列的列表嗎?有沒有辦法讓他們進入命令? – 1252748 2014-11-04 23:21:50

+1

@ thomas這將是按字母順序的是。如果沒有其他專欄來訂購,沒有穩定的方式來獲得您想要的訂單。 Postgresql有一些系統特定的東西,你可能會濫用(請參閱此問題的詳細信息:https://stackoverflow.com/questions/17500013/in-order-sequence-generation)。 – jpw 2014-11-04 23:26:28