[프로그래머스] Lv.2 업그레이드 된 아이템 구하기 (서브쿼리)
[프로그래머스] Lv.2 업그레이드 된 아이템 구하기 (서브쿼리)
May 08, 2024





답
SELECT INFO.ITEM_ID, INFO.ITEM_NAME, INFO.RARITY
FROM ITEM_INFO AS INFO
JOIN ITEM_TREE AS TREE
ON INFO.ITEM_ID = TREE.ITEM_ID
# 1. RARE인 아이템
WHERE TREE.PARENT_ITEM_ID IN (
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE')
ORDER BY INFO.ITEM_ID DESC
풀이
◽ 과정 1 👉 실패
SELECT INFO.ITEM_ID, INFO.ITEM_NAME, INFO.RARITY
FROM ITEM_INFO AS INFO
INNER JOIN_TREE AS TREE
ON INFO.ITEM_ID = TREE.ITEM_ID
WHERE INFO.RARITY = 'RARE' AND TREE.PARENT_ITEM_ID IS NOT NULL
ORDER BY INFO.ITEM_ID DESC
- 아이템의 희귀도가 ‘RARE’인 아이템의 다음 업그레이드 아이템을 찾았다.
- WHERE절에 RARITY가 ‘RARE’로 동등하게 조건이 걸려있어, 업그레이드 아이템의 희귀도가 ‘RARE’인 아이템만 나온다.
◽ 과정 2 👉 성공(서브쿼리)
아이템의 희귀도가 'RARE'인 아이템은 'ITEM_A', 'ITEM_B', 'ITEM_D', 'ITEM_E' 입니다.
이 중 'ITEM_A' 는 'ITEM_B', 'ITEM_C' 로 업그레이드가 가능하며 'ITEM_B' 는 'ITEM_D' , 'ITEM_E' 로 업그레이드가 가능합니다. 'ITEM_D' 와 'ITEM_E'는 더 이상 업그레이드가 가능하지 않습니다.
전제 조건이
RARITY = ‘RARE’
인 것을 해결하기 위해 여러 코드를 짜 보았지만, 결과가 ‘과정 1’과 같았다.
그런데 다시 보니 RARITY가 ‘RARE’인 아이템 = 부모 아이템
이라는 뜻이고, 다음 업그레이드 아이템 = 자식 아이템
이니, 즉 자식 아이템 목록을 불러와야 하는 것이다.
그래서 서브쿼리를 통해 부모의 희귀도가 ‘RARE’인 상품을 먼저 나오게 하고, 그 다음 ITEM_ID를 찾아내야 했다.JOIN
을 통해 테이블의 데이터를 확보한다.
SELECT INFO.ITEM_ID, INFO.ITEM_NAME, INFO.RARITY
FROM ITEM_INFO AS INFO
JOIN ITEM_TREE AS TREE
ON INFO.ITEM_ID = TREE.ITEM_ID
서브쿼리
를 통해 희귀도가 ‘RARE’인 부모 아이템 목록을 나오게 한다.
WHERE TREE.PARENT_ITEM_ID IN (
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE')
// (AND TREE.PARENT_ITEM_ID IS NOT NULL)
// 이미 부모 데이터가 있는 ITEM_ID를 추출했기 때문에 필요 없다.
Share article