CODING TEST/MySQL
Lv2 - 업그레이드 된 아이템 구하기
iamyuunzo
2025. 7. 30. 18:59
📌 문제 정보
- 문제 이름 : 프로그래머스 - (SELECT) 업그레이드 된 아이템 구하기
- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/273711
📌 문제 요약
- ITEM_INFO 테이블 : ITEM_ID, ITEM_NAME, RARITY, PRICE
- ITEM_TREE 테이블 : ITEM_ID, PARENT_ITEM_ID
'ITEM_A'->'ITEM_B'->'ITEM_C'와 같이 업그레이드가 가능한 아이템이 있다면
'ITEM_C'의 PARENT 아이템은 'ITEM_B' , 'ITEM_B'의 PARENT 아이템은 'ITEM_A'
ROOT 아이템은 'ITEM_A'가 됩니다.
- 아이템의 희귀도가 'RARE'인 아이템들의 모든 다음 업그레이드 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬주세요.
예시)
| ITEM_ID | ITEM_NAME | RARITY | PRICE |
| 0 | ITEM_A | RARE | 10000 |
| 1 | ITEM_B | RARE | 9000 |
| 2 | ITEM_C | LEGEND | 11000 |
| 3 | ITEM_D | RARE | 10000 |
| 4 | ITEM_E | RARE | 12000 |
| ITEM_ID | PARENT_ITEM_ID |
| 0 | NULL |
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
| 4 | 1 |
출력)
| ITEM_ID | ITEM_NAME | RARITY |
| 4 | ITEM_E | RARE |
| 3 | ITEM_D | RARE |
| 2 | ITEM_C | LEGEND |
| 1 | ITEM_B | RARE |
📌 내 풀이 및 코드
SELECT
t.ITEM_ID,
i.ITEM_NAME,
i.RARITY
FROM
ITEM_TREE t
JOIN
ITEM_INFO i ON t.ITEM_ID = i.ITEM_ID
WHERE
t.PARENT_ITEM_ID IN (
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE'
)
ORDER BY
t.ITEM_ID DESC;
- 처음에 코드를 PARENT_ITEM_ID = 'RARE' ← 이런식으로 썼는데 PARENT_ITEM_ID = 'RARE' 처럼 희귀도(RARITY)랑 ID를 잘못 비교했기 때문에 계속 오류가 났었음.
- PARENT_ITEM_ID는 숫자 (아이템 ID) / 'RARE'는 문자열 (희귀도)
- 즉, 숫자와 문자열을 비교하고 있어서 조건이 항상 거짓이 됨.
=> 답은 맞지만, 단점은 "자식의 자식의 자식"까지는 못 찾고, 오직 한 단계 자식만 찾는다는 한계가 있음.
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
- .