SQL语句给我以下错误消息Ambiguous column name

时间:2017-05-18 21:04:03

标签: sql sql-server

背景

我对SQL的整个JOIN概念有点新,并尝试编写一个SQL语句,该语句将根据另一个表中的总统ID获取一个国家/地区的名称,后者指向另一个包含的表这个国家的名字。

表格

[总统]

ID | PresidentID | Name | Population Governed
1    3             ME     1,000,000,000

[CountryPopulation]

ID |PresidentID| Population Number| CountryID
1   3             1,000,000,000      12

[国家或地区名称]

ID | CountryID | CountryName
3    12            USA

问题:我写了一个SQL语句,我试图根据总统ID获取国家/地区的名称,但是我的陈述显示错误:

  

不明确的列名称' PresdientID'。

SQL语句

SELECT
    PresidentID
FROM 
    President A 
INNER JOIN 
    CountryPopulation B ON A.PresdientID = B.PresdientID 
WHERE 
    B.CountryID IN (SELECT CountryName 
                    FROM CountryName 
                    WHERE CountryID = B.CountryID)

2 个答案:

答案 0 :(得分:2)

SQL Server不确定您是否要返回A.PresidentID或B.PresidentID。即使在这种情况下值仍然相同,您也需要指定。

答案 1 :(得分:2)

您选择的字段PresidentID不明确。您需要指定要为PresidentID提供值的表格,如下所示:

Select
  A.PresdientID
  From President A INNER JOIN 
  CountryPopulation B ON A.PresdientID = B.PresdientID 
  WHERE B.CountryID IN (SELECT CountryName FROM CountryName WHERE CountryID = B.CountryID)

修改

您的问题表明您正在尝试根据CountryName值获取PresidientID

如果您知道PresidientID值,我会认为您只是这样做:

DECLARE @PresidientID INT = 3
SELECT cn.CountryName
    FROM CountryName cn JOIN CountryPopulation cp ON cn.CountryID = cp.CountryID
    WHERE cp.PresidientID = @PresidientID;

也就是说,您的数据库设计可能不正确。似乎有很多" ID"田野洒满了。例如,您的President表包含ID字段和PresidientID字段;您的CountryName表格同时包含ID字段和CountryID字段。此外,您在多个表中拥有相同的信息(人口编号,受管人口)。

将所有国家/地区属性放入名为Country的单个表中会不会更好?考虑一下:

CREATE TABLE [Country](
    [ID] int IDENTITY(1,1) NOT NULL,
    [Name] nvarchar(100) NOT NULL,
    [Population] INT,
    [PresidentID] INT  -- Foreign Key to president
)

CREATE TABLE [President](
    [ID] int IDENTITY(1,1) NOT NULL,
    [PresidentName] nvarchar(100) NOT NULL
)