본문 바로가기

카테고리 없음

여러개 column에서 null이 아닌 column 1개 선택하기

여러개 레코드가 아닌

한 레코드의 여러개 column 중에 null이 아닌 1개를 선택해야 하는 경우가 있다.

그것도 순서에 맞게!






column이 2개이내 라면 if()문이나 ifnull() 등을 이용하면 편리하지만

column이 3개이상 가면 if(), ifnull() 등으로 처리하기에는 복잡, 지져분해진다.


그렇다고 case-when-else-end 를 사용하기에도,

뭔가 어울리지 않는다.


function(column1, column2, column3, ...) 등의 깔끔한 형태가 있을 것 같은데...

column1이 null 이면 column2을,

column2도 null 이면 column3을 ... 

리턴하는 그런게 있을꺼 같은데, 잘 사용하지 않으니 모르겠다.





어떻게 말로 표현하기도 그렇고,

무작정 메뉴얼에서 찾기도 그렇고

그래서 대충 'mysql select one column from multi column order not null' 으로 검색했더니

딱 맞는 답이 있다.





답변을 확인하면



IFNULL()도 아니고 CASE Syntax 문도 아닌

딱, 내가 원하는 COALESCE 함수가 있다.



http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_coalesce



메뉴얼을 보면 COALESCE() 외에도 평상시 잘 사용하지 않는 연산자들이 많이 보인다.

이럴때 한번 더 보면.....


기억할까?








예를 들어 보자.


3종류의 전화번호(집전화, 핸드폰, 회사전화 등)가 있는데

비어있지 않은(NULL이 아닌) 전화번호 1개를 대표 전화로 선택하려고 한다.



 


COALESCE() 내의 column은 순서에 따라

우선순위(?)가 높은 것부터 입력하면 된다.


IFNULL과 함께 사용하면

입력한 column 모두가 null인 경우,

적절한 기본값을 같이 사용할 수도 있다.