我在使用 Microsoft SQL 2012 Server Management Studio 时遇到 Transact-SQL 中的“列名不明确”问题。
\n\n我\xc2\xb4一直在查看Stackoverflow上已经发布的一些答案,但它们似乎对我不起作用,并且其中的某些部分我根本不\xc2\xb4t理解或失去了一般观点。
\n\n执行以下脚本:
\n\nUSE CDD\n\nSELECT Artist, Album_title, track_title, track_number, Release_Year, EAN_code\nFROM Artists AS a INNER JOIN CD_Albumtitles AS c \n ON a.artist_id = c.artist_id\nINNER JOIN Track_lists AS t \n ON c.title_id = t.title_id\nWHERE track_title = 'bohemian rhapsody'\nRun Code Online (Sandbox Code Playgroud)\n\n触发以下错误消息:
\n\n\n\n\n消息 209,级别 16,状态 1,第 3 行\n 列名称“EAN_code”不明确。
\n
这并不是说这是一个包含艺术家姓名、专辑标题和曲目列表的 CD 数据库。表“CD_Albumtitles”和“Track_lists”都有一列,具有相同的 EAN 代码。EAN 代码是一个重要的国际代码,用于唯一标识 CD 专辑,这就是我想继续使用它的原因。
\n您需要将别名放在选择列表和 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'
Run Code Online (Sandbox Code Playgroud)