2014-07-15 67 views
0

我在使用Microsoft SQL 2012 Server Management Studio的Transact-SQL中遇到'Ambiguous column name'問題。Transact-SQL歧義列名

我一直在尋找已經發布在Stackoverflow上的一些答案,但它們似乎不適用於我,而其中的一部分我根本就不理解或失去了一般的看法。

執行下面的腳本:

USE CDD 

SELECT Artist, Album_title, track_title, track_number, Release_Year, EAN_code 
FROM Artists AS a INNER JOIN CD_Albumtitles AS c 
    ON  a.artist_id = c.artist_id 
INNER JOIN Track_lists AS t 
    ON  c.title_id = t.title_id 
WHERE track_title = 'bohemian rhapsody' 

觸發以下錯誤信息:

消息209,級別16,狀態1,行3 不明確的列名 'EAN_code'。

這並不是說這是一個包含藝術家名稱,專輯名稱和曲目列表的CD數據庫。表'CD_Albumtitles'和'Track_lists'都有一列,具有相同的EAN代碼。 EAN代碼是用於唯一標識CD專輯的重要國際代碼,這就是爲什麼我想繼續使用它。

+0

似乎'EAN_code'存在於兩個表中。只需指定您需要從哪個表中選擇該列即可。即'a.EAN_code' –

回答

0

您需要將別名放在選擇列表和where子句中的所有列的前面。你得到這個錯誤是因爲你目前的一個列是來自你的連接中的多個表。如果您將列別名化,它將實質上選擇一個或另一個表。

SELECT a.Artist,c.Album_title,t.track_title,t.track_number,c.Release_Year,t.EAN_code 
FROM Artists AS a INNER JOIN CD_Albumtitles AS c 
ON a.artist_id = c.artist_id 
INNER JOIN Track_lists AS t 
ON c.title_id = t.title_id 
WHERE t.track_title = 'bohemian rhapsody' 
+0

這就是訣竅!非常感謝 ! – user3763153

+0

@ user3763153 - 不客氣。如果回答您的問題,請接受答案。 –

1

所以選擇源表中的一個,以別名前綴的字段(或表名)

SELECT Artist,Album_title,track_title,track_number,Release_Year, 
     c.EAN_code -- or t.EAN_code, which should retrieve the same value 

順便說一句,儘量前綴的所有字段(在選擇的加盟,該組等等),維護起來更容易。