아이템의 희귀도가 'RARE'인 아이템들의
모든 다음 업그레이드 아이템의
아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요.
이때 결과는 아이템 ID를 기준으로 내림차순 정렬주세요.
SELECT CHILD.ITEM_ID, CHILD.ITEM_NAME, CHILD.RARITY
FROM ITEM_INFO AS I JOIN ITEM_TREE AS T ON I.ITEM_ID=T.PARENT_ITEM_ID
JOIN ITEM_INFO AS CHILD ON T.ITEM_ID=CHILD.ITEM_ID
WHERE I.RARITY="RARE"
ORDER BY CHILD.ITEM_ID DESC
아이템 A를 업그레이드하면 아이템 B가 된다면, A는 B의 부모 아이템(Parent)이다.
각 아이템의 부모 아이템에 대한 정보를 가지고 있는 ITEM_TREE 테이블
을 기존의 ITEM_INFO 테이블
에 JOIN시키면 각 아이템의 자식 아이템, 즉 업그레이드 된 아이템이 무엇인지 알 수 있게 된다.
FROM ITEM_INFO AS I JOIN ITEM_TREE AS T ON I.ITEM_ID=T.PARENT_ITEM_ID
조인된 테이블의 예시는 다음과 같다.
ITEM_INFO 테이블
예시ITEM_ID | ITEM_NAME | RARITY | PRICE |
---|---|---|---|
1 | ITEM_A | COMMON | 100 |
2 | ITEM_B | RARE | 200 |
3 | ITEM_C | EPIC | 300 |
ITEM_TREE 테이블
예시ITEM_ID | PARENT_ITEM_ID |
---|---|
2 | 1 |
3 | 2 |
I.ITEM_ID | I.ITEM_NAME | I.RARITY | I.PRICE | T.ITEM_ID | T.PARENT_ITEM_ID |
---|---|---|---|---|---|
1 | ITEM_A | COMMON | 100 | 2 | 1 |
2 | ITEM_B | RARE | 200 | 3 | 2 |
업그레이드 된 아이템의 아이디가 무엇인지 알게 되었으니(T.ITEM_ID
), 이 아이템의 RARITY
를 알기 위해서는 다시 한번 ITEM_INFO
테이블과 JOIN해야 한다. 즉, 이번 조인 조건은 T.ITEM_ID = CHILD.ITEM_ID
가 될 것이다.
FROM (ITEM_INFO AS I JOIN ITEM_TREE AS T ON I.ITEM_ID=T.PARENT_ITEM_ID)
JOIN ITEM_INFO AS CHILD ON T.ITEM_ID=CHILD.ITEM_ID
I.ITEM_ID | I.ITEM_NAME | I.RARITY | I.PRICE | T.ITEM_ID | T.PARENT_ITEM_ID | CHILD.ITEM_ID | CHILD.ITEM_NAME | CHILD.RARITY | CHILD.PRICE |
---|---|---|---|---|---|---|---|---|---|
1 | ITEM_A | COMMON | 100 | 2 | 1 | 2 | ITEM_B | RARE | 200 |
2 | ITEM_B | RARE | 200 | 3 | 2 | 3 | ITEM_C | EPIC | 300 |
각 아이템 정보에 업그레이드 된 아이템의 정보까지 추가되었으니, WHERE절을 이용하여 RARITY
가 RARE
인 아이템에 대한 정보만 추출하고, SELECT절에서 업그레이드 된 아이템의 정보인 CHILD_ITEM_ID
, CHILD_ITEM_NAME
, CHILD_RARITY
만 추출하면 문제의 조건을 만족시킬 수 있다.
CHILD.ITEM_ID | CHILD.ITEM_NAME | CHILD.RARITY |
---|---|---|
3 | ITEM_C | EPIC |