본문 바로가기

SQL

[MYSQL] IN 구문에 NULL이 포함될 때 주의 사항

https://school.programmers.co.kr/learn/courses/30/lessons/273712

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

  • IN 사용
SELECT ITEM_ID
     , ITEM_NAME
     , RARITY
FROM ITEM_INFO 
NATURAL JOIN ITEM_TREE 
WHERE ITEM_ID NOT IN (SELECT PARENT_ITEM_ID
                      FROM ITEM_TREE)
ORDER BY ITEM_ID DES

 

NULL 값은 정해지지 않은 불확실한 값이기 때문에 IN 구문으로의 정확한 처리가 불가능하다.

따라서 NULL 값이 있는 경우, IN 구문 사용은 피해야 한다.

 

 

    •  ITEM_ID가 다른 아이템의 PARENT_ITEM_ID에 나타나지 않는 아이템 찾기
SELECT I.ITEM_ID
     , ITEM_NAME
     , RARITY
FROM ITEM_INFO AS I
LEFT JOIN ITEM_TREE AS T
ON I.ITEM_ID = T.PARENT_ITEM_ID
WHERE T.PARENT_ITEM_ID IS NULL
ORDER BY I.ITEM_ID DESC

 

ITEM_ID와 PARENT_ITEM_ID가 같도록 조인하고, PARENT_ITEM_ID가 NULL인 경우를 필터링