【问题标题】:How can I correct the correlation names on this sql join?如何更正此 sql 连接上的相关名称?
【发布时间】:2012-02-15 21:55:51
【问题描述】:

我需要一个从两个不同的表中产生三个具有相同名称的字段的连接。当我尝试运行我的 sql 查询时,VS 给了我以下错误。

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、姓名、President_Id、VicePresident_Id。
  • 政治人物:身份、姓名。
  • 联表:国家、总裁、副总裁

(请注意,我的应用程序中的表和字段有不同的名称。我将它们概括为使这个示例更清晰,希望与其他人更相关。)

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

【问题讨论】:

    标签: sql sql-server database


    【解决方案1】:

    在 SQL 标准中,白话“表别名”称为correlation name,白话“列别名”称为as clause。您似乎混淆了这两个术语。

    【讨论】:

      【解决方案2】:

      您需要在表格上使用 AS 来给它们起别名:

      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
      

      【讨论】:

        【解决方案3】:

        为每个对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
        

        【讨论】:

        • 为什么我第一个回答 exactly 相同的答案,但你得到了选票?我被骗了! :)
        • @Bohemian 我猜是因为您最初没有解释。几秒钟后,我解释完了。
        • 谢谢,迈克尔。这完美无缺。我也很欣赏这个解释。我还不能接受答案(6 分钟),但我会接受的。再次感谢。
        • 是的..你在这个上拥有我 :)
        【解决方案4】:

        给表格的每个引用一个别名

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-22
          • 2013-03-20
          • 1970-01-01
          • 2015-05-21
          • 1970-01-01
          • 2019-06-15
          相关资源
          最近更新 更多