[프로그래머스/MYSQL] 업그레이드 된 아이템 구하기
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
2)
SELECT * FROM ITEM_INFO AS A
LEFT JOIN ITEM_TREE AS B ON 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')
여기서 자식들의 필요한 정보, 정렬순서를 추가해주면 정답이 나온다