Sql 如何在已联接的表上执行联接?
我需要在连接表上执行连接,但我不确定如何完成。希望下面的查询能够演示我正在尝试做的事情:获取国家名称、每个国家的领导人以及每个领导人的家乡 我认为这个查询的问题是在第二次与President.homightry\u Id连接时使用了连接的表“President”。我不知道还可以尝试什么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
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分钟)