为什么SELECT TOP 1...ORDER BY返回表中的第二行?

Dan*_*tom 4 sql t-sql sql-server sql-order-by

当我用查询选择所有行时:

SELECT * 
FROM AFT_Contacts 
ORDER BY Tries
Run Code Online (Sandbox Code Playgroud)

我看到了结果:

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
Run Code Online (Sandbox Code Playgroud)

但查询:

SELECT TOP 1 * 
FROM AFT_Contacts 
ORDER BY Tries
Run Code Online (Sandbox Code Playgroud)

返回:

ID       Name     Area     Phone      Status    Tries
-----------------------------------------------------    
117971   Brian    Two      2222222222 New       0
Run Code Online (Sandbox Code Playgroud)

为什么它不会返回亚当的细节,因为他们是第一个在桌子上?

Hon*_*ger 11

在关系数据库中,表没有固有的顺序.在ORDER BY你给不超过所有记录不同,事实上它已经结束了所有的记录一样.因此,返回结果的顺序仍然不确定且不可预测.因此,top 1回报是不可预测的一行.

你说"亚当的细节是表中的第一个",这根本不是真的; 表中的记录存储没有任何顺序.如果您选择没有order by或(如您的情况),order by则不确定性,返回的顺序是任意的.