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를 부모로 삼는 자식 아이템이 없다는 뜻이므로
더 이상 업그레이드 할 수 없는 아이템임을 의미한다
'코딩테스트' 카테고리의 다른 글
| [26.03.24 코테/회고(MySQL)]-없어진 기록 찾기 (0) | 2026.03.24 |
|---|---|
| [26.03.23 코테/회고(MySQL/Oracle)]-년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2026.03.23 |
| [26.03.19 코테/회고(MySQL)]-주문량이 많은 아이스크림 조회하기 (0) | 2026.03.19 |
| [26.03.18 코테/회고(MySQL)]-즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2026.03.18 |
| [26.03.17 코테/회고(MySQL/Oracle)]-그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2026.03.17 |