FULL OUTER JOIN 복수개의 KEY값을 MERGE하는 방법

생각하는 마리오네트·2022년 4월 13일
0

SQL

목록 보기
36/39

결론

FULL OUTER JOIN을 하게 되면 KEY값이 복수개가 되고 어느 하나가 NULL값일 때 해당 KEY값이 NULL값으로 처리 되는데 이를 위한 해결책으로 "COALESCE" 를 사용한다.

상황 설명

  1. 테이블이 두개가 있다고 가정해보자.
CodeasiaPrice
37050
41260
11270

테이블 명 : asiaCustomer

Codeafricaprice
39980
11265
53190

테이블 명 : africaCustomer

이렇게 두개의 테이블이 있는데 해당 테이블은 (Code =음식의 종류를 코드로 표현했다고 가정) asia와 africa에 해당 음식에 대한 가격정보를 담은 테이블이라고 할때 모든 Code(음식족류)에 따른 Price(가격)이 담긴 테이블을 만들고 싶어한다고 가정해보자 원하는 결과는 아래와 같을것이다.

CodeasiaPriceafricaprice
37050
41260
1127065
39980
53190
  1. 보통 FULL OUTER JOIN을 통하면 다음과 같은 고민이 생긴다.

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만 사용할 수 있고 이렇게 되면

CodeasiaPriceafricaprice
37050
41260
1127065
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컬럼에 한줄로 나열을 하게되면 아래와 같은 결과를 볼 수 있습니다.

CodeasiaPriceafricaprice
37050NULL
41260NULL
1127065
399NULL80
531NULL90

(실제로 문제를 해결할 때 찾아본 사이트 : https://stackoverflow.com/questions/57560487/full-outer-join-on-multiple-keys

검색에 사용한 문장 : how to merge FULL OUTER JOIN multiple keys)

profile
문제를해결하는도구로서의"데이터"

0개의 댓글