模糊列名称:为什么在某些情况下它不明确?

Fab*_*ler 0 sql sql-server

如您所知,如果我们选择两个表而我们具有相同的列名,则会收到错误:

'不明确的列名'ColumnName''

我已经知道设置别名确实解决了这个问题.

但是,似乎列的名称不在 SELECT语句中,那么它适用于SQL Server 2008 R2(在我的数据库中).兼容级别设置为100.

所以下面的陈述是有效的:

SELECT t1.ID
FROM Table1 t1 
JOIN Table2 t2 ON (t2.ID = t1.ID) 
ORDER BY ID
Run Code Online (Sandbox Code Playgroud)

但显然在其他情况下,上述声明确实会返回错误(我知道这是因为它发生在客户的网站上).同样在SQL Fiddle上,它在SQL Server 2008和SQL Server 2012上都返回错误.

有人知道为什么或在什么情况下上面的查询仍然返回错误?

我的猜测是SQL Server上的版本或设置问题.

注意:链接的副本确实解决了我的问题.兼容级别设置为80.将其更改为100可解决问题.

T M*_*own 8

每当你的SELECT,JOIN你将得到这个错误,其中,基团,具有不完全限定列与有超过1列与您加入到这个名字.

ORDER BY Name示例有效,因为ORDER BY将允许您使用SELECT中列的名称,例如,这将在ORDER BY中起作用,但不能在SQL语句中的任何其他位置起作用.

SELECT t1.ID, t1.Name AS [CrazyName]
FROM Table1 t1 
JOIN Table1 
  ON Table2 t2 (t2.ID = t1.ID) 
ORDER BY [CrazyName]
Run Code Online (Sandbox Code Playgroud)

  • `ORDER BY`是唯一可以使用列别名的子句,因为它是最后处理的,所以这可能是准确的. (2认同)