2011-08-05 47 views
0

運行下面的SQL語句時出現錯誤消息。這是一個非常基本的陳述,我必須忽略一些非常簡單的東西。這種使用SQL別名(AS)有什麼問題?

如果我刪除別名,該語句執行得很好。重新添加別名,我得到錯誤。

在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 - 逗號不是語句的一部分,我仍然得到錯誤。

+0

一個downvote左側領域?真的嗎? – DenaliHardtail

回答

2

試試這個:

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

它無法找到T1.titleId因爲你正在更新的「人」和SQL只能看到你別名爲T1和T2的人表。所以你想在你的情況下更新T1。你的內部連接還有一個額外的逗號。

+0

我修改了這個問題。逗號是我嘗試過的其他東西的剩餘部分。它已被刪除,我仍然收到錯誤。您的建議解決了問題,我會盡快接受(<5分鐘)。謝謝! – DenaliHardtail

+0

@special - 不要挑剔,但是Brian和我在Keith做過之前就發現了這個問題。 – JNK

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 
2

我覺得as T1,後的逗號是多餘的。請嘗試刪除它。

4

您有兩個問題。

1 - 逗號。我猜你在某個時候使用了不贊成的隱含的JOIN語法。

2 - 當您有JOIN時,您還應該使用UPDATE行上的別名。您在t1UPDATE ing people這是不一致的字段SET

嘗試:

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

要說明更多信息,UPDATE中的字段列表必須是指定表中的字段。在你的原始文件中,你試圖更新'people',但改變'T1'中的字段。 – Mike

+0

@mike - 謝謝,我更新以反映這一點。 – JNK

5

您的UPDATE一些語法問題。它應該是:

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

+1 - 因爲您是第一個發佈正確的解決方案,所以應該被接受。 – JNK

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

你不別名上的SET