Sql 为什么选择前1名。ORDER BY返回表中的第二行?

Sql 为什么选择前1名。ORDER BY返回表中的第二行?,sql,sql-server,tsql,sql-order-by,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 T

当我选择查询中的所有行时:

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的详细信息,因为它们是表中的第一个?在关系数据库中,表没有固有的顺序。您给出的排序依据并非在所有记录上都是不同的,事实上在所有记录上都是相同的。因此,返回结果的顺序仍然不是确定的和不可预测的。因此,
top 1
返回一个不可预测的行


你说“亚当的细节是第一位的”,这根本不是真的;表中的记录不按任何顺序存储。如果您选择不带订单依据或(在您的案例中)的订单依据是不确定的,则返回的订单是任意的

答案的第一部分可以,但第二部分不行。(1) 堆不是唯一的选项,行可能是有序的(2)优化器本身不处理执行,因此不确定顺序。事实上,没有什么可以决定顺序,这是任意的。感谢编辑marc_以获取Adam的详细信息,您需要使用
order BY Tries,Name
来获取名字,以防
trys
值上有多行绑定