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
值上有多行绑定