Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在已联接的表上执行联接?_Sql_Sql Server_Database - Fatal编程技术网

Sql 如何在已联接的表上执行联接?

Sql 如何在已联接的表上执行联接?,sql,sql-server,database,Sql,Sql Server,Database,我需要在连接表上执行连接,但我不确定如何完成。希望下面的查询能够演示我正在尝试做的事情:获取国家名称、每个国家的领导人以及每个领导人的家乡 我认为这个查询的问题是在第二次与President.homightry\u Id连接时使用了连接的表“President”。我不知道还可以尝试什么 SELECT Countries.Name AS Country, President.Name AS Leader, PresidentHomeTown.Name AS LeaderHomeTo

我需要在连接表上执行连接,但我不确定如何完成。希望下面的查询能够演示我正在尝试做的事情:获取国家名称、每个国家的领导人以及每个领导人的家乡

我认为这个查询的问题是在第二次与President.homightry\u 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中,我得到一个错误,“多部分标识符”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.

总统表中没有Id列。仔细检查。

总统表中没有Id列。仔细检查。

您指定的别名(例如在
结果中作为比较结果)与您尝试使用的别名(例如在
比较.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

(对于所有其他联接也是如此)。

您指定的别名(例如在
结果中作为比较结果)与您尝试使用的别名(例如在
比较.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

(对于所有其他联接也是如此)。

试试这个,您的名称不同:

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 = BaselineResult.Id 
    LEFT OUTER JOIN Results AS ComparisonResult ON CaseComparisons.ComparisonResult_Id = ComparisonResult.Id
    LEFT OUTER JOIN Setups AS Setup ON BaselineResult.Setup_Id = Setup.Id
    LEFT OUTER JOIN BuildVersions AS BaselineVersion ON BaselineResult.Version_Id = BaselineVersion.Id
WHERE 
    CaseComparisons.Status = 'Queued' OR 
    BaselineResult.Status = 'Queued' OR 
    ComparisonResult.Status = 'Queued'

试试这个,你有不同的名字:

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 = BaselineResult.Id 
    LEFT OUTER JOIN Results AS ComparisonResult ON CaseComparisons.ComparisonResult_Id = ComparisonResult.Id
    LEFT OUTER JOIN Setups AS Setup ON BaselineResult.Setup_Id = Setup.Id
    LEFT OUTER JOIN BuildVersions AS BaselineVersion ON BaselineResult.Version_Id = BaselineVersion.Id
WHERE 
    CaseComparisons.Status = 'Queued' OR 
    BaselineResult.Status = 'Queued' OR 
    ComparisonResult.Status = 'Queued'

看来你走对了方向?你有什么问题?你有样本数据吗?你的查询应该运行得很好。它是否抛出错误?或者重新运行的数据不是您期望的数据?可能是的重复数据。只是想检查一下
president
表中是否有一列
id
?我的“好奇”搜索结果是:“打字”->5000+,“内存”->4002,“循环”->3919”,而“->3159,“溢出”->2670似乎你走对了方向?你有什么问题?你有样本数据吗?你的查询应该运行得很好。它是否抛出错误?或者重新运行的数据不是您期望的数据?可能是的重复数据。只是想检查一下
president
表是否有一列
id
?我的“好奇”搜索结果是:“打字”->5000+,“内存”->4002,“循环”->3919”,而“->3159,“溢出”->2670谢谢,就是这样。只是打字错误,是吗?令人尴尬的我会尽快核对答案。(剩余2分钟)谢谢,就这样。只是打字错误,是吗?令人尴尬的我会尽快核对答案。(还剩2分钟)