728x90
1. 문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/273712
2. 제출한답
SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO
WHERE ITEM_ID NOT IN (SELECT PARENT_ITEM_ID
FROM ITEM_TREE WHERE NOT ISNULL(PARENT_ITEM_ID))
ORDER BY ITEM_ID DESC;
ITEM_TREE의 PARENT_ITEM_ID와 관련이 없는 ITEM_ID를 조회 합니다 이떄 NULL 값 처리를 통해 NOT IN 조건이 올바르게 동작하도록 했으며, 이를 통해 데이터 누락이나 불필요한 필터링 문제를 방지합니다.
이는 IN 연산자는 서브쿼리의 값 중 하나라도 일치하면 데이터를 조회하지만, NOT IN 연산자는 서브쿼리의 모든 값과 비교하여 모두 다르다고 판단될 때만 데이터를 조회합니다. 이때, 서브쿼리에 NULL 값이 포함되어 있다면 문제가 발생합니다. NULL과의 비교는 항상 UNKNOWN(불확실)으로 처리되기 때문에, NOT IN 조건이 FALSE로 평가되어 결과적으로 데이터가 조회되지 않습니다. 이를 방지하려면 서브쿼리에서 NULL 값을 제거하고 조회해야 합니다.
728x90
댓글