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

时间:2016-11-25 13:47:17

标签: sql sql-server tsql sql-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

为什么它不会返回Adam的详细信息,因为它们是表中的第一个?

1 个答案:

答案 0 :(得分:11)

在关系数据库中,表没有固有的顺序。您提供的ORDER BY与所有记录并不明显,事实上它对所有记录都是相同的。因此,返回结果的顺序仍然不确定且不可预测。因此top 1返回一个不可预测的行。

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