sql - 如何在 JOIN-ed 表上执行 JOIN?

标签 sql sql-server database

我需要在 JOIN-ed 表上执行 JOIN,但我不确定如何完成它。希望下面的查询演示了我正在尝试做的事情:获取国家名称、每个国家的领导人和每个领导人的家乡。

我认为此查询的问题在于在与 President.HomeTown_Id 的第二次连接中使用了连接表“President”。我不知道还能尝试什么。

SELECT 
  Countries.Name AS Country, 
  President.Name AS Leader,
  PresidentHomeTown.Name AS LeaderHomeTown
FROM Countries
  LEFT OUTER JOIN PoliticalFigures AS President ON Countries.President_Id = President.Id
  LEFT OUTER JOIN Cities AS PresidentHomeTown ON President.HomeTown_Id = PresidentHomeTown.Id

在 VS 中,我收到错误消息“无法绑定(bind)由多部分组成的标识符“President.Id”。”

表名和字段名是虚构的,但我需要解决一个相同的问题。我更改了名称以使事情更清楚;希望这将与更多人相关。

-- 更新--

也许原始代码有帮助:

SELECT 
    CaseComparisons.Directory AS CaseComparisonDir, 
    BaselineResult.Directory AS BaselineResultDir, 
    ComparisonResult.Directory AS ComparisonResultDir,
    Setup.FullSvnLink AS SvnLink,
    BaselineVersion.FullFilePath AS BaselineExecutableDir
FROM CaseComparisons 
    LEFT OUTER JOIN Results AS BaselineResult ON CaseComparisons.BaselineResult_Id = Baseline.Id 
    LEFT OUTER JOIN Results AS ComparisonResult ON CaseComparisons.ComparisonResult_Id = Comparison.Id
    LEFT OUTER JOIN Setups AS Setup ON Baseline.Setup_Id = Setups.Id
    LEFT OUTER JOIN BuildVersions AS BaselineVersion ON BaselineResult.Version_Id = BuildVersions.Id
WHERE 
    CaseComparisons.Status = 'Queued' OR 
    Baseline.Status = 'Queued' OR 
    Comparison.Status = 'Queued'

运行查询时出现的错误:

The multi-part identifier "Baseline.Id" could not be bound.
The multi-part identifier "Comparison.Id" could not be bound.
The multi-part identifier "Baseline.Setup_Id" could not be bound.
The multi-part identifier "Setups.Id" could not be bound.
The multi-part identifier "BuildVersions.Id" could not be bound.
The multi-part identifier "Baseline.Status" could not be bound.

最佳答案

您指定的别名(例如在 Results AS ComparisonResult 中)与您尝试使用的别名(例如在 Comparison.Id 中)不匹配>).所以,改变这个:

    LEFT OUTER JOIN Results AS ComparisonResult
                 ON CaseComparisons.ComparisonResult_Id = Comparison.Id

要么这样:

    LEFT OUTER JOIN Results AS ComparisonResult
                 ON CaseComparisons.ComparisonResult_Id = ComparisonResult.Id

或者这个:

    LEFT OUTER JOIN Results AS Comparison
                 ON CaseComparisons.ComparisonResult_Id = Comparison.Id

(对于所有其他联接也类似)。

关于sql - 如何在 JOIN-ed 表上执行 JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9010041/

相关文章:

SQL Server 将 varbinary 转换为字符串

javascript - 多次填写同一表单字段的内容并将其写入数据库的多行中

database - 在 PL/SQL 中使用 "select *"作为游标是否被认为是糟糕的编程?

SQL查询获取最多

mysql - 需要 SQL 帮助 - 跟踪已发送的电子邮件

sql-server - 如何检查凭据是否存在于 SQL Server 实例中?

c# - SqlDataAdapter 插入后获取标识

sql - PostgreSQL 约束 - 只有一行可以设置标志

SQL 日期间隙

mysql - 我有两个选择,我希望结果表是两个选择的并集