더 이상 업그레이드할 수 없는 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬해 주세요.
SELECT
: 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력
FROM
: ITEM_INFO
, ITEM_TREE
WHERE
: 더 이상 업그레이드할 수 없는 아이템
ORDER BY
: 아이템 ID를 기준으로 내림차순 정렬
아이템의 계층 구조(아이템 ID를 표시)를 아래와 같이 나타낼 수 있다. 이 때, '더 이상 업그레이드할 수 없는 아이템'이란 계층 구조의 가장 아래에 위치한 아이템들이다.
이 아이템들은 '본인의 ID(ITEM_ID
)를 PARENT_ITEM_ID
로 가지는 다른 아이템'이 없는 특징이 있다. 실제, 주어진 ITEM_TREE
테이블을 통해서도 확인할 수 있다.
NOT IN
을 사용하여 '본인의 ID(ITEM_ID
)를 PARENT_ITEM_ID
로 가지는 다른 아이템'이 없는 아이템(더 이상 업그레이드할 수 없는 아이템) 정보를 출력한다.
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;
NOT IN
비교시null
의 포함
https://wildeveloperetrain.tistory.com/223
위의 블로그에NOT IN
에 대한 설명이 자세하게 나와있다. 해당 글에 따르면,SELECT DISTINCT(PARENT_ITEM_ID) FROM ITEM_TREE ORDER BY ITEM_ID DESC
의 결과
null
이 포함되므로 이를 서브쿼리로 하여NOT IN
을 수행하면 원하는 결과를 얻지 못한다.