[프로그래머스][SQL] ⭐ 업그레이드 할 수 없는 아이템 구하기

Eunding·2024년 2월 21일
0

SQL 고득점 Kit

목록 보기
43/62

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

https://school.programmers.co.kr/learn/courses/30/lessons/273712

문제

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

예시

풀이


291명만 푼 따끈따끈한 문제이다

1)
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;



2)
SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO A
WHERE NOT EXISTS (SELECT *
                     FROM ITEM_TREE B
                     WHERE B.PARENT_ITEM_ID = A.ITEM_ID )
ORDER BY ITEM_ID DESC;

서브쿼리와 NOT IN 연산자로 풀었다.


배운 점

EXISTS

문제를 풀면서 든 생각은 'ITEM_ID가 PARENT_ITEM_ID에 없으면 될 것 같은데 이걸 어떻게 구현하지?'였다.

---처음에 구현했다가 틀린 코드
SELECT A.ITEM_ID, A.ITEM_NAME, A.ITEM_RARITY
FROM ITEM_INFO A
    INNER JOIN ITEM_TREE B ON A.ITEM_ID = B.ITEM_ID
WHERE A.ITEM_ID NOT EXISTS B.PARENT_ITEM_ID
ORDER BY A.ITEM_ID DESC;

그래서 NOT EXISTS를 썼는데 알고보니 EXSITS는 서브 쿼리 연산자이고 서브쿼리가 반환하는 결과값이 있는지, 없는지만 확인한다고 한다.

결과가 있는지 없는지만 확인한다는 것을 알고난 후 코드를 다시 짜봤다.(풀이 2번에 써있는 코드이다)

SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO A
WHERE NOT EXISTS (SELECT *
                     FROM ITEM_TREE B
                     WHERE B.PARENT_ITEM_ID = A.ITEM_ID )
ORDER BY ITEM_ID DESC;

=> ITEM_ID와 PARENT_ITEM_ID가 같은 게 존재하지 않으면 출력하는 형식이다.

profile
안녕하세요~

0개의 댓글

관련 채용 정보