我对ORDER BY
与SQL Server 2014的行为感到困惑。
我有这样的查询:
select a.Name, b.Status
from a
join b on a.parent_id = b.parent_id
order by parent_id
此查询将引发错误
不明确的列名'parent_id'
这是有道理的,因为列出现在两个表中。我不明白的是,如果我列出SELECT
中的其中一列,就像这样:
select a.Name, b.*
from a
join b on a.parent_id = b.parent_id
order by parent_id
它有效。
我理解ORDER BY
是'后进'类型的操作,这就是为什么你可以按列顺序排序。我知道您可以通过SELECT
子句中未列出的列进行排序。那么,为什么它会在一个案例中抛出错误而不是另一个案例呢?如果我要列出SELECT
vs中表a中的列,将其列在表{b}的ORDER BY
中,那么排序会有所不同吗?
编辑:这个问题的答案:Ambiguous Column Name: Why is it ambiguous in certain circumstances?解释了我的问题,但为了清楚起见,它不像那个问题所暗示的那样依赖于版本。
答案 0 :(得分:7)
当您说order by parent_id
时,SQL引擎必须查找parent_id
。有两种可能性:
FROM
条款SELECT
条款如果没有表别名,SQL Server将首先查看SELECT
。瞧!如果它在那里找到parent_id
,那么就完成了。它只检测重复项,如果必须转到FROM
子句进行解决。