sql
mysql - 프로그래머스 273712 / 업그레이드 할 수 없는 아이템 구하기
kdozlo
2024. 12. 5. 12:30
https://school.programmers.co.kr/learn/courses/30/lessons/273712
lv3
구현 방법
item_tree에서 parent_item_id에 등장하지 않은 item_info의 item_id를 출력하면 된다. 방법은 3가지 정도 있다.
1. not in 사용
in을 사용할 때 null이 나오는 경우를 고려해야 한다. in에서 null이 나올 때 항상 false로 처리하여 데이터가 나오지 않기 때문이다.
2. not exists 사용
3. left join 사용
코드
-- 업그레이드 할 수 없는 아이템 구하기
-- https://school.programmers.co.kr/learn/courses/30/lessons/273712
-- not in 사용
select
i.item_id,
i.item_name,
i.rarity
from
item_info i
where
i.item_id not in (
select distinct parent_item_id
from item_tree
where parent_item_id is not null
)
order by
i.item_id desc
;
-- not exists 사용
select
i.item_id,
i.item_name,
i.rarity
from
item_info i
where
not exists (
select 1
from item_tree t
where t.parent_item_id = i.item_id
)
order by
i.item_id desc
;
-- left join 사용
SELECT
i.item_id,
i.item_name,
i.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;