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

[프로그래머스] Lv.2 업그레이드 된 아이템 구하기 (서브쿼리)
muaga's avatar
May 08, 2024
[프로그래머스] Lv.2 업그레이드 된 아이템 구하기 (서브쿼리)
Contents
풀이
 
notion image
notion image
notion image
notion image
notion image
 


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
  1. 아이템의 희귀도가 ‘RARE’인 아이템의 다음 업그레이드 아이템을 찾았다.
  1. 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를 찾아내야 했다.
 
  1. 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
 
  1. 서브쿼리 를 통해 희귀도가 ‘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

muaga's Hub