Ambigous列名

时间:2017-12-29 16:25:43

标签: sql sql-server

我对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?解释了我的问题,但为了清楚起见,它不像那个问题所暗示的那样依赖于版本。

1 个答案:

答案 0 :(得分:7)

当您说order by parent_id时,SQL引擎必须查找parent_id。有两种可能性:

  • FROM条款
  • SELECT条款

如果没有表别名,SQL Server将首先查看SELECT。瞧!如果它在那里找到parent_id,那么就完成了。它只检测重复项,如果必须转到FROM子句进行解决。