프로그래머스/My SQL

💫업그레이드 된 아이템 구하기

싱싱한복초이 2024. 11. 10. 13:06

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

[문제 설명]

아이템의 희귀도가 'RARE'인 아이템들의 모든 다음 업그레이드 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬주세요.

 

[나의 풀이]

SELECT I.ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO I JOIN ITEM_TREE T
ON I.ITEM_ID = T.ITEM_ID
WHERE PARENT_ITEM_ID IN (SELECT ITEM_ID 
                         FROM ITEM_INFO 
                         WHERE RARITY = 'RARE')
ORDER BY I.ITEM_ID DESC;

 

문제를 쉽게 풀어서 얘기하면 PARENT ITEM이 RARE인 ITEM의 ID,NAME,RARITY를 출력하라는 것임 

 JOIN을 한 번 하고 WHERE절에 SELECT구문을 넣어서 작성한 경우

 

[다른 풀이]

SELECT ITEM_ID, ITEM_NAME, RARITY FROM ITEM_INFO 
 WHERE ITEM_ID IN (SELECT ITEM_ID FROM ITEM_TREE WHERE PARENT_ITEM_ID 
 					IN (SELECT ITEM_ID FROM ITEM_INFO WHERE RARITY = 'RARE')) 
 ORDER BY ITEM_ID DESC;

JOIN을 사용하지 않고 서브쿼리만을 활용하여 작성한 경우

 

RARITY가 RARE인 ITEM_ID를 ITEM_INFO테이블에서 추출

->  ITEM_TREE테이블의 PARENT_ITEM_ID중 앞에서 추출한 ID에 해당하는 것만 SELECT

-> 최종적으로 ITEM_INFO테이블에서 위의 조건들에 해당하는 ID를 골라서 ID,NAME,RARITY를 출력