Почему MySQL сообщает о синтаксической ошибке в FULL OUTER JOIN?

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 = airport.iaco_code полное внешнее соединение' по строке 4

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

Related of "Почему MySQL сообщает о синтаксической ошибке в FULL OUTER JOIN?"

В 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 SELECT * FROM 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 UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id LEFT JOIN t3 ON t2.id = t3.id UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id RIGHT JOIN t3 ON t2.id = t3.id 

Ответ cletus не совсем прав. 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; 

Я только что сделал трюк:

 (select 1 from DUAL) d LEFT OUTER JOIN t1 ON t1.id = t2.id LEFT OUTER JOIN t2 ON t1.id = t2.id 

Дело в том, что запрос из dual делает точку исправления, а mysql может внешнее соединение с двумя другими таблицами