https://school.programmers.co.kr/learn/courses/30/lessons/273712
SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO
WHERE ITEM_ID NOT IN (SELECT PARENT_ITEM_ID
FROM ITEM_TREE)
ORDER BY ITEM_ID DESC
NOT IN (NULL) 조건식은, NULL의 비교는 UNKNOWN이므로 NULL을 반환한다.
이는 WHERE절 조건식을 항상 FALSE로 만들게 되므로, 아무 결과도 조회되지 않는다.
이후 값의 범위에 포함이 되지 않는 -1로 예외 처리하였다.
오답을 받으며 떠오른 내용이 있다.
IN(NULL, A)의 경우에는 A에 포함 되면 TRUE지만, NOT IN(NULL, A)은 무조건 FALSE임에 특히 주의해야 한다고 하셨었다.
IN(FALSE, TRUE) => TRUE
NOT IN(FALSE, TRUE) => FALSE
수정
SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO
WHERE ITEM_ID NOT IN (SELECT IFNULL(PARENT_ITEM_ID, -1)
FROM ITEM_TREE)
ORDER BY ITEM_ID DESC
'[프로그래머스] SQL > 오답 노트' 카테고리의 다른 글
[lv3] 대장균의 크기에 따라 분류하기 2 (0) | 2024.10.18 |
---|---|
[lv2] 자동차 평균 대여 기간 구하기 (1) | 2024.10.09 |
[lv2] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2024.10.05 |
[lv3] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (1) | 2024.10.05 |
[lv3] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2024.10.04 |