2012-01-21 22 views
16

我需要一個連接,從兩個不同的表中產生具有相同名稱的三個字段。當我嘗試運行我的SQL查詢時,VS給了我下面的錯誤。如何更正此SQL連接上的關聯名稱?

FROM子句中的對象「PoliticalFigures」和「PoliticalFigures」具有相同的公開名稱。使用相關名稱來區分它們。

我一直試圖使用「AS」來區分這些字段,但我還沒有找到一個工作解決方案。這是SQL查詢我運行:

SELECT Countries.Name AS Country, PoliticalFigures.Name AS President, PoliticalFigures.Name AS VicePresident FROM Countries 
LEFT OUTER JOIN PoliticalFigures ON Countries.President_Id = PoliticalFigures.Id 
LEFT OUTER JOIN PoliticalFigures ON Countries.VicePresident_Id = PoliticalFigures.Id 

如果是從代碼中並不明顯,這些都是表。

  • 國家:Id,Name,President_Id,VicePresident_Id。
  • PoliticalFigures:Id,Name。
  • 連接表:國家,總統,副總統

(。注意,在我的申請表和字段的名稱不同,我歸納他們使這個例子更清晰,希望更相關的其他人)

(我使用的工具的Visual Web Developer 2010 Express和SQL Server 2008 Express的。)

回答

26

使用表別名爲每個參考PoliticalFigures代替:

SELECT 
    Countries.Name AS Country, 
    P.Name AS President, 
    VP.Name AS VicePresident 
FROM 
    Countries 
    LEFT OUTER JOIN PoliticalFigures AS P ON Countries.President_Id = P.Id 
    LEFT OUTER JOIN PoliticalFigures AS VP ON Countries.VicePresident_Id = VP.Id 
+3

爲什麼我首先用*完全相同的答案回答,但你得到了選票?我被撕掉了! :) – Bohemian

+0

@Bohemian我猜,因爲你最初沒有解釋。幾秒鐘後我完成了一個解釋。 –

+0

謝謝,邁克爾。這是完美的。我也很欣賞這個解釋。我還不能接受答案(6分鐘),但我會盡我所能。再次感謝。 –

18

給每個參考表中的別名

SELECT 
    Countries.Name AS Country, 
    P.Name AS President, 
    VP.Name AS VicePresident 
FROM Countries 
LEFT JOIN PoliticalFigures P ON Countries.President_Id = P.Id 
LEFT JOIN PoliticalFigures VP ON Countries.VicePresident_Id = VP.Id 
2

您需要儘可能使用上的表格,讓他們別名:

SELECT Countries.Name AS Country, Pres.Name AS President, Vice.Name AS VicePresident FROM Countries 
LEFT OUTER JOIN PoliticalFigures AS Pres ON Countries.President_Id = Pres.Id 
LEFT OUTER JOIN PoliticalFigures AS Vice ON Countries.VicePresident_Id = Vice.Id 
1

在SQL標準,白話文'表別名'被稱爲correlation name,而鄉土'列別名'被稱爲as clause。看來你對這兩個術語感到困惑。