我对ORDER BYSQL Server 2014 的行为感到困惑.
我有这样的查询:
select a.Name, b.Status
from a
join b on a.parent_id = b.parent_id
order by parent_id
Run Code Online (Sandbox Code Playgroud)
此查询将引发错误
不明确的列名'parent_id'
这是有道理的,因为列出现在两个表中.我不明白的是,如果我列出其中一个列,SELECT那么:
select a.Name, b.*
from a
join b on a.parent_id = b.parent_id
order by parent_id
Run Code Online (Sandbox Code Playgroud)
有用.
我理解ORDER BY为"最后进入"操作类型,这就是为什么你可以通过列序数订购.而且我知道您可以通过该SELECT条款中未列出的列进行排序.那么,为什么它会在一个案例中抛出错误而不是另一个案例呢?而且是顺序不同,如果我要列出从表中列SELECTVS列出它在ORDER BY从B表?
编辑:这个问题的答案:模棱两可的专栏名称:为什么在某些情况下它是模棱两可的?解释了我的问题,但为了清楚起见,它并不像这个问题所暗示的那样依赖于版本.
当你说order by parent_id,然后SQL引擎必须寻找parent_id.有两种可能性:
FROM条款SELECT条款如果没有表别名,SQL Server将SELECT首先查看.瞧!如果它找到了parent_id,那就完成了.它只检测重复项,如果它必须转到FROM子句进行解析.