如何更正此sql连接上的相关名称?

Log*_*acy 26 sql database sql-server

我需要一个连接,从两个不同的表中生成三个具有相同名称的字段.当我尝试运行我的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
Run Code Online (Sandbox Code Playgroud)

如果从代码中看不出来,这些就是表格.

  • 国家:Id,Name,President_Id,VicePresident_Id.
  • 政治图:Id,名字.
  • 加入表:国家,总统,副总统

(注意,我的应用程序中的表和字段有不同的名称.我正在概括它们以使这个例子更清晰,并希望与其他人更相关.)

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

Mic*_*ski 36

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
Run Code Online (Sandbox Code Playgroud)

  • 我怎么回答第一个*完全相同的答案,但你得到了票?我被扯掉了!:) (4认同)
  • 是的..你在这个上拥有我:) (3认同)

Boh*_*ian 19

为表的每个引用添加一个别名:

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
Run Code Online (Sandbox Code Playgroud)


one*_*hen 5

在SQL标准中,将白话的“表别名”称为a correlation name,将白话的“列别名”称为a as clause。看来您对这两个术语感到困惑。