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

제로·2026년 3월 31일

📍 문제

어느 한 게임에서 사용되는 아이템들은 업그레이드가 가능합니다.

ITEM_A -> ITEM_B 업그레이드 가능할 때,
ITEM_A를 ITEM_B의 PARENT 아이템,
PARENT 아이템이 없는 아이템을 ROOT 아이템이라고 합니다.
예를 들어 ITEM_A -> ITEM_B -> ITEM_C 와 같이 업그레이드가 가능한 아이템이 있다면

ITEM_C의 PARENT 아이템은 ITEM_B
ITEM_B의 PARENT 아이템은 ITEM_A
ROOT 아이템은 ITEM_A가 됩니다.

다음은 해당 게임에서 사용되는 아이템 정보를 담은 ITEM_INFO 테이블과 아이템 관계를 나타낸 ITEM_TREE 테이블입니다.

<ITEM_INFO>
ITEM_ID - 아이템 ID
ITEM_NAME - 아이템 명
RARITY - 아이템의 희귀도
PRICE - 아이템의 가격

<ITEM_TREE>
ITEM_ID - 아이템 ID
PARENT_ITEM_ID - PARENT 아이템의 ID

단, 각 아이템들은 오직 하나의 PARENT 아이템 ID 를 가지며, ROOT 아이템의 PARENT 아이템 ID 는 NULL 입니다. ROOT 아이템이 없는 경우는 존재하지 않습니다.


더 이상 업그레이드할 수 없는 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬해 주세요.


시작 ITEM = PARENT_ID가 존재하지 않는다.
최종 ITEM = PARENT_ID가 된 적이 없다.

고로 PARENT_ID에 속한 적 없는 ITEM_ID를 구하면 된다.

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;

WHERE을 내부에 서브 쿼리를 작성,
NULL이 아닌 PARENT_ID (NULL이 되면 비교할 대상이 없어질뿐더러 PARENT_ID가 NULL 이면 시작 쿼리를 구하는 것과 다름없음)에 속한 적 없는 ITEM_ID를 구한다.

0개의 댓글