필기ㆍ코테 공부/SQL

[프로그래머스/MYSQL] 업그레이드 된 아이템 구하기

be-traineeit 2025. 1. 25. 14:25
반응형

출저: 프로그래머스

 

SELECT 

문제풀이

 

A. JOIN 활용

SELECT A.ITEM_ID, A.ITEM_NAME, A.RARITY FROM ITEM_INFO AS A
     LEFT JOIN ITEM_TREE AS B ON A.ITEM_ID = B.ITEM_ID
WHERE B.PARENT_ITEM_ID IN (SELECT ITEM_ID FROM ITEM_INFO WHERE RARITY = 'RARE')
ORDER BY A.ITEM_ID DESC

 


 

 

세대, 업그레이드, 상속 등등 묶여있는 테이블은 일단 JOIN ON을 어떻게 써야할지 고민해야한다

ON 조건에 따라 1)과 2)으로 분리가 된다.

 

1)

SELECT * FROM ITEM_INFO AS A
LEFT JOIN ITEM_TREE AS B ON A.ITEM_ID = B.ITEM_ID

A.ITEM_ID = B.ITEM_ID 인 경우

 

2)

SELECT * FROM ITEM_INFO AS A
LEFT JOIN ITEM_TREE AS B ON A.ITEM_ID = B.PARENT_ITEM_ID 

A.ITEM_ID = B.PARENT_ITEM_ID 인 경우

 

 

 

문제는 아이템 희귀가 'RARE' 레벨인 부모자식들의 정보를 구하는 것. 

자식의 정보를 구하는 것이기에 구하기 쉬운 1번을 선택하여 진행했다

 

부모 조건을 RARE 로 해야하기 때문에 ITEM_INFO에서 RARE 인 행만 뽑아내고,

 →  SELECT ITEM_ID FROM ITEM_INFO WHERE RARITY = 'RARE'  

 

이 레어 레벨의 행들이 부모가 되어야하므로  B.PARENT_ITEM_ID을 IN으로 조건을 건다

 →  B.PARENT_ITEM_ID  IN ( SELECT ITEM_ID FROM ITEM_INFO WHERE RARITY = 'RARE'  )

 

 

그러면 RARE 레벨인 부모의 테이블이 완성된다

SELECT * FROM ITEM_INFO AS A
     LEFT JOIN ITEM_TREE AS B ON A.ITEM_ID = B.ITEM_ID
WHERE B.PARENT_ITEM_ID IN (SELECT ITEM_ID FROM ITEM_INFO WHERE RARITY = 'RARE')

 

여기서 자식들의 필요한 정보, 정렬순서를 추가해주면 정답이 나온다

 

반응형