[프로그래머스 / SQL 고득점 KIT] 업그레이드 할 수 없는 아이템 구하기

Woonil·2024년 2월 20일
0

SQL

목록 보기
2/2
post-thumbnail

🤔 접근 방법

더 이상 업그레이드할 수 없는 아이템의 아이템 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 을 수행하면 원하는 결과를 얻지 못한다.

profile
우니리개발일지

0개의 댓글