Ambigous列名

Lov*_*ode 3 sql sql-server

我对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表?

编辑:这个问题的答案:模棱两可的专栏名称:为什么在某些情况下它是模棱两可的?解释了我的问题,但为了清楚起见,它并不像这个问题所暗示的那样依赖于版本.

Gor*_*off 7

当你说order by parent_id,然后SQL引擎必须寻找parent_id.有两种可能性:

  • FROM条款
  • SELECT条款

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