2009. 5. 13. 00:54
Database/MySQL
MySQL에서 나름대로 많은 작업을 해왔지만 MS SQL에서 사용하던 FULL OUTER JOIN이 안된다는 것을 오늘에서야 알았다. 당황스러웠지만 침착하게(?) FULL OUTER JOIN 기능을 사용할 수 있는 방법에 관해서 트릭을 찾아보면서 고민을 좀 하였다.
그러는 중 내가 선택한 방법은 {LEFT | LIGHT} OUTER JOIN과 UNION의 조합이다. UNION을 이용할 때 두 질의의 결과값들이 중복되어 있을 경우, 이는 하나로 표시된다. 다음의 예제를 통해서 살펴보도록 하자.
test1과 test2 테이블을 만들고 다음과 같이 데이터를 넣어보자.
[test1] 테이블
[test2] 테이블
다음 질의를 실행하면 [test_result] 테이블이 자동으로 생성되고 그 결과가 들어가 있는 것을 확인할 수 있다.
[test_result] 테이블
그러는 중 내가 선택한 방법은 {LEFT | LIGHT} OUTER JOIN과 UNION의 조합이다. UNION을 이용할 때 두 질의의 결과값들이 중복되어 있을 경우, 이는 하나로 표시된다. 다음의 예제를 통해서 살펴보도록 하자.
test1과 test2 테이블을 만들고 다음과 같이 데이터를 넣어보자.
[test1] 테이블
name age
-------------------
lin 22
-------------------
lin 22
sean 111
[test2] 테이블
name age
-------------------
sean 28
ted 1
-------------------
sean 28
ted 1
다음 질의를 실행하면 [test_result] 테이블이 자동으로 생성되고 그 결과가 들어가 있는 것을 확인할 수 있다.
SELECT t1.name as name, IFNULL(t1.age, 0) AS age1, IFNULL(t2.age, 0) AS age2
INTO test_result
FROM test1 t1
LEFT OUTER JOIN test2 t2 ON t1.name = t2.name
UNION
SELECT t2.name, IFNULL(t1.age, 0), IFNULL(t2.age, 0)
FROM test1 t1
RIGHT OUTER JOIN test2 t2 ON t1.name = t2.name
INTO test_result
FROM test1 t1
LEFT OUTER JOIN test2 t2 ON t1.name = t2.name
UNION
SELECT t2.name, IFNULL(t1.age, 0), IFNULL(t2.age, 0)
FROM test1 t1
RIGHT OUTER JOIN test2 t2 ON t1.name = t2.name
[test_result] 테이블
name age1 age2
------------------------------
lin 22 0
sean 111 28
ted 0 1
------------------------------
lin 22 0
sean 111 28
ted 0 1