📍 문제
어느 한 게임에서 사용되는 아이템들은 업그레이드가 가능합니다.
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를 구한다.