Как выполнить JOIN для таблицы JOIN-ed? - PullRequest
1 голос
/ 26 января 2012

Мне нужно выполнить JOIN для таблицы JOIN-ed, и я не уверен, как это сделать.Надеемся, что приведенный ниже запрос демонстрирует, что я пытаюсь сделать: получить названия стран, лидеров каждой страны и родной город каждого лидера.

Я думаю, что проблема с этим запросом заключается в использовании объединенной таблицы «Президент"во втором присоединиться к President.HomeTown_Id.Я не знаю, что еще попробовать.

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.

Ответы [ 3 ]

4 голосов
/ 26 января 2012

У вас есть несоответствия между указанными псевдонимами (например, в 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

(и аналогично для всех остальных объединений).

0 голосов
/ 26 января 2012

Попробуйте, у вас разные имена:

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'
0 голосов
/ 26 января 2012

У вас нет столбца Id в таблице президента. Еще раз проверьте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...