FULL OUTER JOIN을 하게 되면 KEY값이 복수개가 되고 어느 하나가 NULL값일 때 해당 KEY값이 NULL값으로 처리 되는데 이를 위한 해결책으로 "COALESCE" 를 사용한다.
Code | asiaPrice |
---|---|
370 | 50 |
412 | 60 |
112 | 70 |
테이블 명 : asiaCustomer
Code | africaprice |
---|---|
399 | 80 |
112 | 65 |
531 | 90 |
테이블 명 : africaCustomer
이렇게 두개의 테이블이 있는데 해당 테이블은 (Code =음식의 종류를 코드로 표현했다고 가정) asia와 africa에 해당 음식에 대한 가격정보를 담은 테이블이라고 할때 모든 Code(음식족류)에 따른 Price(가격)이 담긴 테이블을 만들고 싶어한다고 가정해보자 원하는 결과는 아래와 같을것이다.
Code | asiaPrice | africaprice |
---|---|---|
370 | 50 | |
412 | 60 | |
112 | 70 | 65 |
399 | 80 | |
531 | 90 |
SELECT asia.Code,
asia.Price,
africa.Price
FROM asiaCustomer AS asia
FULL OUTER JOIN africaName AS africa
ON asia.Code = africa.Code
GROUP BY asia.Code
위의 코드로 볼때 Code를 기준으로 그룹핑을 해야하므로 GROUP BY 를 해줬을때 SELECT에서 문제가 생긴다.
FULL OUTER JOIN 을 했기때문에 Code 컬럼은 asia.Code와 africa.Code 이렇게 두개의 Code컬럼이 존재하는데 asia.Code로 GROUP BY 를 했기 때문에 aisa.Code만 사용할 수 있고 이렇게 되면
Code | asiaPrice | africaprice |
---|---|---|
370 | 50 | |
412 | 60 | |
112 | 70 | 65 |
80 | ||
90 |
위와 같이 africa의 Code컬럼은 NULL값으로 처리가 된다.
이게 싫어서 afica.Code로 GROUP BY 해봤자 원하는 결과는얻지 못한다.
다른 방법으로 africa.Code를 연산자를 붙여서 SELECT한다고 해도 Code컬럼이 두줄로 원한는 결과를 얻지 못하게 된다.
그렇다면 어떻게 FULL OUTER JOIN을 했을때 MULTIPLE한 KEY값들을 합칠 수 있을까???
해결책은 COALESCE 함수를 사용하는 것 입니다.
COALESCE함수에 대해 잠깐 살펴보겠습니다.
SELECT COALESCE(컬럼1, 컬럼2, 컬럼3,.....컬럼N)
FROM Table
다음과 같이 사용할 수 있습니다.
컬럼1이 NULL값이 아니면 컬럼1값을 출력
컬럼1이 NULL값이고 컬럼2가 NULL이 아니라면 컬럼2값을 출력
컬럼1,2 가 NULL값이고 컬럼3이 NULL이 아니라면 컬럼3값을 출력
이러한 성격을 지니고 있는 함수로서 보통은 NULL값을 채우기 위한 용도로 많이 사용합니다. 하지만 이번경우에 이를 활용할 수 있습니다.
SELECT COALESCE(asia.Code, africa.Code) as Code
위의 코드를 통해 asia.Code가 NULL값이면 africa.Code를 넣어주기 때문에 Code컬럼에 한줄로 나열을 하게되면 아래와 같은 결과를 볼 수 있습니다.
Code | asiaPrice | africaprice |
---|---|---|
370 | 50 | NULL |
412 | 60 | NULL |
112 | 70 | 65 |
399 | NULL | 80 |
531 | NULL | 90 |
(실제로 문제를 해결할 때 찾아본 사이트 : https://stackoverflow.com/questions/57560487/full-outer-join-on-multiple-keys
검색에 사용한 문장 : how to merge FULL OUTER JOIN multiple keys)