Как я могу исправить имена корреляции в этом соединении sql? - программирование
Подтвердить что ты не робот

Как я могу исправить имена корреляции в этом соединении sql?

Мне нужно соединение, которое дает три поля с тем же именем из двух разных таблиц. Когда я пытаюсь запустить свой 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.
  • Политические символы: Идентификатор, имя.
  • Присоединившийся стол: страна, президент, вице-президент

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

(Инструменты, которые я использую, - это Visual Web Developer 2010 Express и SQL Server 2008 Express.)

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

Вам нужно использовать 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

Ответ 4

В SQL-стандартах "псевдоним таблицы" называется "t20", а "псевдоним столбца" именуется as clause. Кажется, у вас два смущения.