코딩테스트

[26.03.20 코테/회고(MySQL)]-업그레이드 할 수 없는 아이템 구하기

지니248 2026. 3. 20. 13:27

Lv3. 업그레이드 할 수 없는 아이템 구하기 (MySQL)

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

 

내가 작성한 코드

-- 풀이1
SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO
WHERE ITEM_ID NOT IN (SELECT PARENT_ITEM_ID
                      FROM ITEM_TREE
                      WHERE PARENT_ITEM_ID IS NOT NULL)
ORDER BY ITEM_ID DESC;

-- 풀이2
SELECT I.ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO I
LEFT JOIN ITEM_TREE T
       ON I.ITEM_ID = T.PARENT_ITEM_ID
WHERE T.PARENT_ITEM_ID IS NULL
ORDER BY I.ITEM_ID DESC;

 

문제 회고

1. IS NOT NULL과 IS NULL의 차이

- 풀이1의 IS NOT NULL

   - 문제에서 ROOT 아이템의 PARENT 아이템 ID는 NULL 이라고 명시되어있다

   - NOT IN 에서 NULL이 하나라도 있으면 거짓도, 참도 아닌 알수 없음이 된다

   - 따라서 누군가의 부모인 ID 목록을 뽑을 때 ROOT 아이템의 부모 ID인 NULL을 미리 제거해주어야 정상적인 비교가 가능하다

- 풀이2의 IS NULL

   - LEFT JOIN을 하면 ITEM_INFO(왼쪽)의 아이템 ID가 ITEM_TREE(오른쪽)의 부모 ID 목록에 없을경우

     오른쪽 테이블의 컬럼이 NULL로 채워진다

   - 오른쪽 테이블의 컬럼이 NULL 이라는 것은 내 ID를 부모로 삼는 자식 아이템이 없다는 뜻이므로 

     더 이상 업그레이드 할 수 없는 아이템임을 의미한다