【问题标题】:Transact-SQL Ambiguous column nameTransact-SQL 不明确的列名
【发布时间】:2014-07-15 13:12:42
【问题描述】:

我在使用 Microsoft SQL 2012 Server Management Studio 时遇到了 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 专辑,这就是我想继续使用它的原因。

【问题讨论】:

  • 似乎EAN_code 存在于两个表中。只需指定您需要从哪个表中选择该列。即a.EAN_code

标签: tsql


【解决方案1】:

您需要将别名放在选择列表和 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'

【讨论】:

  • @user3763153 -- 不客气。如果它回答了您的问题,请接受答案。
【解决方案2】:

所以选择一个源表,在字段前加上别名(或表名)

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

对了,尽量给所有字段加前缀(在select、join、group by等),维护起来更方便。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多