Как я могу исправить имена корреляции в этом соединении SQL? - PullRequest
25 голосов
/ 22 января 2012

Мне нужно объединение, которое дает три поля с одинаковыми именами из двух разных таблиц. Когда я пытаюсь выполнить свой sql-запрос, VS выдает следующую ошибку.

Объекты «Политические фигуры» и «Политические фигуры» в предложении FROM имеют одинаковые открытые имена. Используйте имена корреляций, чтобы различать их.

Я пытался использовать «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

Если из кода не видно, это таблицы.

  • Страны: Id, Name, President_Id, VicePresident_Id.
  • Политические цифры: Id, Name.
  • За столом: страна, президент, вице-президент

(Обратите внимание, что таблицы и поля в моем приложении имеют разные имена. Я обобщаю их, чтобы сделать этот пример более понятным и , надеюсь, более релевантным для других.)

(Я использую следующие инструменты: Visual Web Developer 2010 Express и SQL Server 2008 Express.)

Ответы [ 4 ]

35 голосов
/ 22 января 2012

Используйте псевдонимы таблиц для каждой ссылки на 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
19 голосов
/ 22 января 2012

Дайте каждой ссылке на таблицу псевдоним :

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
4 голосов
/ 23 января 2012

В стандартах SQL местный «псевдоним таблицы» упоминается как correlation name, а общеупотребительный «псевдоним столбца» упоминается как as clause.Кажется, вы перепутали два термина.

2 голосов
/ 22 января 2012

Вам нужно использовать AS на таблицах, чтобы дать им псевдонимы:

SELECT Countries.Name AS Country, Pres.Name AS President, Vice.Name AS VicePresident FROM Countries
LEFT OUTER JOIN PoliticalFigures AS Pres ON Countries.President_Id = Pres.Id
LEFT OUTER JOIN PoliticalFigures AS Vice ON Countries.VicePresident_Id = Vice.Id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...