Почему MySQL сообщает о синтаксической ошибке относительно ПОЛНОГО ВНЕШНЕГО ОБЪЕДИНЕНИЯ?

SELECT airline, airports.icao_code, continent, country, province, city, website 

FROM airlines 
FULL OUTER JOIN airports ON airlines.iaco_code = airports.iaco_code
FULL OUTER JOIN cities ON airports.city_id = cities.city_id
FULL OUTER JOIN provinces ON cities.province_id = provinces.province_id
FULL OUTER JOIN countries ON cities.country_id = countries.country_id
FULL OUTER JOIN continents ON countries.continent_id = continents.continent_id

Это говорит это

У Вас есть ошибка в Вашем синтаксисе SQL; проверьте руководство, которое соответствует Вашей серверной версии MySQL для правильного синтаксиса для использования близкого 'внешнего объединения airports на авиакомпаниях iaco_code = аэропорты iaco_code полное внешнее объединение' в строке 4

Синтаксис выглядит правильным мне. Я никогда не делал большого количества соединений прежде, но мне нужны те столбцы в таблице, которая является перекрестная ссылаемый различным идентификатором.

47
задан einpoklum - reinstate Monica 1 April 2013 в 21:30
поделиться

2 ответа

В MySQL нет FULL OUTER JOIN. Смотрите 7.2.12. Упрощение внешнего соединения и 12.2.8.1. Синтаксис JOIN:

Вы можете эмулировать FULL OUTER JOIN, используя UNION (начиная с версии MySQL 4.0.0):

с двумя таблицами t1, t2:

SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION
ВЫБРАТЬ * ИЗ t1
RIGHT JOIN t2 ON t1.id = t2.id

с тремя таблицами t1, t2, t3:

SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
LEFT JOIN t3 ON t2.id = t3.id
СОЕДИНЕНИЕ
ВЫБРАТЬ * ИЗ t1
RIGHT JOIN t2 ON t1.id = t2.id
LEFT JOIN t3 ON t2.id = t3.id
UNION
ВЫБРАТЬ * ИЗ t1
ПРЯМОЕ СОЕДИНЕНИЕ t2 ON t1.id = t2.id
RIGHT JOIN t3 ON t2.id = t3.id
74
ответ дан 26 November 2019 в 19:40
поделиться

Ответ Клетуса не совсем правильный. UNION удалит повторяющиеся записи, которые будет включать FULL OUTER JOIN . Если вам нужны дубликаты, используя что-то вроде:

SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
LEFT JOIN t3 ON t2.id = t3.id
LEFT JOIN t4 ON t3.id = t4.id
UNION ALL
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
LEFT JOIN t3 ON t2.id = t3.id
LEFT JOIN t4 ON t3.id = t4.id
WHERE t1.id IS NULL
UNION ALL
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
RIGHT JOIN t3 ON t2.id = t3.id
LEFT JOIN t4 ON t3.id = t4.id
WHERE t2.id IS NULL
UNION ALL
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
RIGHT JOIN t3 ON t2.id = t3.id
RIGHT JOIN t4 ON t3.id = t4.id
WHERE t3.id IS NULL;
12
ответ дан 26 November 2019 в 19:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: