我从一张桌子中得到了奇怪的结果.请考虑下表:
USERID TICKETSASSIGNED
1 0
100 0
101 0
102 0
103 0
Run Code Online (Sandbox Code Playgroud)
现在,如果我有以下sql:
SELECT TOP 1 USERID
FROM TABLEX
ORDER BY TICKETSASSIGNED
Run Code Online (Sandbox Code Playgroud)
我期望得到的结果是"1",但大多数时候我得到"100",第二个记录.因为TICKETSASSIGNED值都是"0",所以它会随机选择它认为是TOP 1的那个,因为这是我订购的字段.要在这种情况下获得正确的"1"值,我还必须订购USERID.
有任何想法吗?
OMG*_*ies 10
我期望得到的结果是"1",但大多数时候我得到"100",第二个记录.由于TICKETSASSINGED值都是"0",因此它会随机选择它认为是TOP 1的那个,因为这是我订购的字段.要在这种情况下获得corredct值"1",我还必须在USERID上订购.
这是所有SQL中的默认行为 - 如果没有ORDER BY子句,则没有订单保证,在这种情况下,您不会按相关数据排序,因此数据库会随意选择一行.
使用:
ORDER BY TICKETSASSIGNED, USERID
Run Code Online (Sandbox Code Playgroud)
ORDER BY在这种情况下,您的子句中需要第二列:
SELECT TOP 1 USERID
FROM TABLEX
ORDER BY TICKETSASSIGNED, USERID
Run Code Online (Sandbox Code Playgroud)
如果没有这个,它可能会给你排序的记录TICKETASSIGNED,然后是它们在表中的物理位置,例如在大多数情况下插入的顺序。
如果您检查文档TOP:TOP(Transact-SQL),特别是备注下的前两个段落,它明确指出TOP不对行进行排序.因此,您自己强加的订单就是使用的订单.
不幸的是,您的订购不完整.它只会产生你想要的东西.
正确的方法正是您已经想到的,您还需要通过USERID订购.