使用SQL别名(AS)有什么问题?

时间:2011-08-05 17:28:51

标签: sql sql-server-2008

运行以下SQL语句时收到错误消息。这是一个非常基本的陈述,我必须忽略一些非常简单的事情。

如果删除别名,语句执行就好了。重新添加别名,我收到错误。

SSMS中的消息:

Msg 4104, Level 16, State 1, Line 2
The multi-part identifier "T1.titleId" could not be bound.

SQL语句:

UPDATE People
SET T1.titleId = T2.ID 
FROM people as T1 
INNER JOIN titles as T2
ON T1.title = T2.Title 

更新1 - 逗号不是声明的一部分,我仍然收到错误。

6 个答案:

答案 0 :(得分:5)

您的UPDATE中存在一些语法问题。它应该是:

UPDATE T1
SET titleId = T2.ID
FROM people as T1
INNER JOIN titles as T2
ON T1.title = T2.Title

答案 1 :(得分:4)

您有两个问题。

1 - 逗号。我猜你在某些时候使用了弃用的隐式JOIN语法。

2 - 当您拥有UPDATE时,您还应该使用JOIN行上的别名。您SETt1 UPDATE people中的字段UPDATE t1 SET T1.titleId = T2.ID FROM people as T1 INNER JOIN titles as T2 ON T1.title = T2.Title 不一致。

尝试:

{{1}}

答案 2 :(得分:3)

编辑:将人员更改为T1 在T1之后你有一个逗号来创建问题。

将声明更改为:

UPDATE T1 -- People 
  SET T1.titleId = T2.ID  
 FROM people as T1 --Removed the comma that was here
 INNER JOIN titles as T2 
   ON T1.title = T2.Title

答案 3 :(得分:2)

我认为as T1,之后的逗号是多余的。请尝试删除它。

答案 4 :(得分:2)

试试这个:

UPDATE t1
SET T1.titleId = T2.ID 
FROM people as T1 
INNER JOIN people as T2
ON T1.titleId = T2.titleId 

找不到T1.titleId,因为你正在更新“Person”,而sql只能看到别名为T1和T2的Person表。所以你想在你的情况下更新T1。你的内连接中还有一个额外的逗号。

答案 5 :(得分:0)

UPDATE t1 
SET titleId = T2.ID  
FROM people as T1  
INNER JOIN people as T2 
ON T1.titleId = T2.titleId  

您没有为SET

左侧的字段添加别名