簡體   English   中英

SQL語句給我以下錯誤消息模糊列名稱

[英]SQL statement is giving me the following error message Ambiguous column name

背景

對於整個JOIN SQL概念,我有點陌生,嘗試編寫一條SQL語句,該語句將根據另一個表中的President 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)

SQL Server不確定您要返回A.PresidentID還是B.PresidentID。 即使在這種情況下值相同,也需要指定。

選擇的字段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)

編輯

您的問題表明您正在嘗試根據PresidientID值獲取CountryName

如果您知道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
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM