58
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 サーバーのバージョンに対応するマニュアルで、airports4 行目の「airlines.iaco_code = airports.iaco_code full outer join」の近くで使用する正しい構文を確認してください。

構文は私には正しいようです。これまで多くの結合を行ったことはありませんが、さまざまな ID によって相互参照されるテーブル内の列が必要です。

4

4 に答える 4

91

FULL OUTER JOINMySQLにはありません。7.2.12を参照してください。外部結合の簡素化12.2.8.1。結合構文:

FULL OUTER JOINUNION を使用してエミュレートできます (MySQL 4.0.0 以降):

2 つのテーブル 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

3 つのテーブル 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
于 2010-03-05T03:06:27.800 に答える
16

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;
于 2010-07-28T20:34:07.127 に答える
1

私はちょうどこれのためのトリックを作りました:

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

ポイントは、デュアルからのクエリが修正点を作成し、mysql が他の 2 つのテーブルをそれに外部結合できることです。

于 2016-10-05T20:40:37.323 に答える