2016-11-25 43 views
3

當我選擇與查詢的所有行:爲什麼選擇TOP 1。 。 。 ORDER BY返回表中的第二行?

SELECT * 
FROM AFT_Contacts 
ORDER BY Tries 

我看到的結果是:

ID  Name  Area  Phone  Status Tries  
------------------------------------------------------ 
117970 Adam  One  1111111111 New  0 
117971 Brian Two  2222222222 New  0  
117972 Colin Three 3333333333 New  0  
117973 David Four  4444444444 New  0  
117974 Edward Five  5555555555 New  0  
117975 Frank Six  6666666666 New  0 

但查詢:

SELECT TOP 1 * 
FROM AFT_Contacts 
ORDER BY Tries 

返回:

ID  Name  Area  Phone  Status Tries 
-----------------------------------------------------  
117971 Brian Two  2222222222 New  0 

爲什麼我因爲他們是第一個在桌子上,所以不要回復亞當的細節?

+1

感謝編輯marc_s – Dantom

+0

爲了讓亞當的細節,你需要使用'ORDER BY嘗試次數,Name'獲得的情況下,第一個名字幾行的'Tries'值 –

回答

11

在關係數據庫表中沒有固有的順序。您給出的ORDER BY在所有記錄中並不是獨特的,實際上它在所有記錄中都是相同的。所以返回結果的順序仍然不確定和不可預測。因此top 1返回一個不可預知的行。

你說「亞當的細節是第一個表格」,這根本不是真的;表中的記錄沒有任何順序存儲。如果您選擇沒有order by或(如您的情況)order by不確定,返回的訂單是任意的。

+0

的第1部分綁答案確定但不是第二。 (1)堆不是唯一的選項,行可能是有序的(2)優化器不處理執行本身,因此不確定順序。其實沒有什麼決定順序,這是任意的。 –

+0

@DuduMarkovitz,好點,相應編輯 – HoneyBadger