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;