Post

[Programmers] 273711번 - 업그레이드 된 아이템 구하기 [MySQL]

[Programmers] 273711번 - 업그레이드 된 아이템 구하기 [MySQL]

문제 링크


1. 문제 풀이


PARENT 아이템의 희귀도가 RARE인 경우 정보를 출력하는 문제로 JOIN을 두 번하는 방식으로 해결할 수 있고, 서브쿼리와 IN 연산자를 활용해도 해결할 수 있다.


2. 쿼리


1. JOIN + JOIN

PARENT 아이템을 의미하는 pITEM_TREE, 아이템을 의미하는 c를 전부 JOIN 해줬다. 이후 WHERE 절로 PARENT 아이템의 희귀도가 RARE인 레코드만 필터링해주고 아이템 정보를 출력했다.

1
2
3
4
5
6
7
8
9
10
11
SELECT
    c.ITEM_ID,
    c.ITEM_NAME,
    c.RARITY
FROM ITEM_INFO AS p
JOIN ITEM_TREE AS t
    ON p.ITEM_ID = t.PARENT_ITEM_ID
JOIN ITEM_INFO AS c
    ON t.ITEM_ID = c.ITEM_ID
WHERE p.RARITY = 'RARE'
ORDER BY c.ITEM_ID DESC;


2. JOIN + 서브쿼리

WHERE 절로 필터링할 때 서브쿼리로 희귀도가 RARE인 아이템의 ITEM_ID를 가져와서 IN 연산자로 비교해줬다.

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
    i.ITEM_ID,
    i.ITEM_NAME,
    i.RARITY
FROM ITEM_INFO AS i
JOIN ITEM_TREE AS t
    ON i.ITEM_ID = t.ITEM_ID
WHERE t.PARENT_ITEM_ID IN (
    SELECT ITEM_ID
    FROM ITEM_INFO
    WHERE RARITY = 'RARE'
)
ORDER BY i.ITEM_ID DESC;

This post is licensed under CC BY 4.0 by the author.