Как я могу исправить имена корреляции в этом соединении 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.)
Ответы
Ответ 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
. Кажется, у вас два смущения.