programing

MySQL에서 FULL OUTER JOIN 구문 오류가 보고되는 이유는 무엇입니까?

goodsources 2022. 11. 19. 11:35
반응형

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 서버 버전에 해당하는 설명서에서 '외부 가입'에 가까운 올바른 구문을 확인하십시오.airports4번 라인의 airlines.iaco_code = airports.iaco_code full outer join'에서 확인할 수 있습니다.

구문이 맞는 것 같아요.조인을 많이 해본 적은 없지만 다양한 ID에 의해 상호 참조되는 표의 열이 필요합니다.

거기에는 없다FULL OUTER JOINMySQL에 있습니다.7.2.12를 참조해 주세요. 외부 조인 심플화와 12.2.8.1. JOIN 구문:

에뮬레이트 할 수 있다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

클레투스의 답은 정확하지 않다. 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

요점은 듀얼로부터의 쿼리가 고정점을 만들고 mysql은 다른 2개의 테이블을 외부로 결합할 수 있다는 것입니다.

필요할 때 케이스를 보충하기만 하면 됩니다.FULL OUTER JOIN3개의 테이블 t1, t2, t3.t1, t2, t3를 차례로 나머지 두 테이블과 결합할 수 있습니다.

SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
LEFT JOIN t3 ON t1.id = t3.id
UNION
SELECT * FROM t2
LEFT JOIN t1 ON t2.id = t1.id
LEFT JOIN t3 ON t2.id = t3.id
UNION
SELECT * FROM t3
LEFT JOIN t1 ON t3.id = t1.id
LEFT JOIN t2 ON t3.id = t2.id

언급URL : https://stackoverflow.com/questions/2384298/why-does-mysql-report-a-syntax-error-on-full-outer-join

반응형