본문 바로가기
PS/SQL

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

by nyrimmm 2024. 6. 11.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 설명

  • Lv 3 문제
  • 더 이상 업그레이드할 수 없는 아이템의 아이템 ID, 아이템명, 아이템의 희귀도 출력
  • 결과는 아이템 ID 기준으로 내림차순 정렬
  • 'ITEM_A' → 'ITEM_B' 업그레이드 가능할 때, ITEM_A는 ITEM_B의 PARENT_ITEM 이다.
  • PARENT_ITEM이 없는 아이템은 ROOT_ITEM 이다.

 

 

 

 

문제 풀이

JOIN 사용

SELECT II.ITEM_ID, II.ITEM_NAME, II.RARITY
FROM ITEM_INFO II LEFT OUTER JOIN ITEM_TREE IT
ON II.ITEM_ID = IT.PARENT_ITEM_ID AND IT.PARENT_ITEM_ID IS NOT NULL
WHERE IT.PARENT_ITEM_ID IS NULL
ORDER BY II.ITEM_ID DESC;

 

◼️두 테이블을 LEFT OUTER JOIN 해서 업그레이드할 수 없는 아이템 구하기

    -  ITEM_INFO 테이블과 ITEM_TREE 테이블을 LEFT OUTER JOIN한다.

    -  조인 조건은 ITEM_ID와 PARENT_ITEM_ID가 같고, PARENT_ITEM_ID가 NULL이 아니다.

    -  LEFT OUTER JOIN 후, PARENT_ITEM_ID 가 NULL인 아이템이 업그레이드 할 수 없는 아이템이다.

 

◼️ORDER BY 로 ITEM ID 기준 내림차순 정렬

 

 

NOT IN 연산자 사용

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;

 

◼️ 서브 쿼리로 업그레이드 할 수 있는 ITEM들의 PARENT_ITEM_ID 구하기

    -  서브 쿼리에서 PARENT_ITEM_ID가 NULL이 아닌 PARENT_ITEM_ID만 조회 → 업그레이드 가능한 ITEM들의 PARENT_ITEM_ID

 

◼️ 업그레이드할 수 없는 ITEM 구하기

    -  메인 쿼리에서 서브쿼리의 PARENT_ITEM_ID와 일치하지 않은 ITEM_ID 정보만 추출 → 업그레이드가 불가능한 ITEM들의 ITEM_ID

 

◼️ORDER BY 로 ITEM ID 기준 내림차순 정렬