FireDrago

[SQL] 업그레이드 할 수 없는 아이템 구하기 본문

코딩테스트/프로그래머스

[SQL] 업그레이드 할 수 없는 아이템 구하기

화이용 2024. 8. 26. 13:29

문제

 

풀이

문제를 읽고 필요한 SQL을 정리해보았다.

 

1. 더 이상 업그레이드가 가능하지 않은 아이템의 ITEM_ID를 구한다.

    (ITEM_TREE 테이블에서 PARENT_ITEM_ID 값이 없는 ITEM_ID를 구한다)

2. 1의 ITEM_ID 를 바탕으로 ITEM_INFO 테이블에서 ITEM_NAME, RARITY를 구하고 출력한다.

 

select 
    item_id, item_name, rarity
from
    item_info
where
    item_id in (
        select 
            item_id
        from
            item_tree
        where 
            item_id not in (
                select 
                    parent_item_id
                from 
                    item_tree
                where 
                    parent_item_id is not null
            )
    )
order by 
    item_id desc

 

처음 작성한 쿼리는 너무 복잡하다.....

고민끝에 더 간단한 방식의 쿼리로 수정할 수 있었다.

 

1. ITEM_TREE 테이블에서 null 을 제외한 PARENT_ITEM_ID 값을 중복없이 구한다.

2. ITEM_INFO 테이블에서 1에서 구한 id 값을 제외한 ITEM_ID 의 ITEM_NAME, RARITY를 구한다.

 

select 
    item_id, item_name, rarity
from
    item_info
where
    item_id not in (
        select distinct
            parent_item_id
        from 
            item_tree
        where 
            parent_item_id is not null
    )
order by 
    item_id desc