728x90
728x90
문제
난이도
Level 2
풀이 방법
문제를 이해하는데 조금 어려움을 겪었다.
"아이템의 희귀도가 'RARE'인 아이템들의 모든 다음 업그레이드 아이템의"
이 부분이 뭔 소린가 했다.
이해는 됐어도 이걸 어떻게 구현해야 하는지가 막막했다.
item_tree에 나온 정보는 parent 아이템이라, 이걸 반대 방향으로 뒤집는 걸 구현하는 아이디어를 생각해 내기가 어려웠다.
우선 아이템의 희귀도가 'RARE'이면서, 누군가의 parent인 아이템을 찾기로 했다.
select a.item_id
from item_info a, item_tree b
where a.item_id = b.parent_item_id
and a.rarity = 'RARE'
위와 같은 쿼리를 짤 수 있었다.
이제 이 결과를 바탕으로 나온 아이템이 parent 아이템인 아이템들을 뽑아내면 된다.
따라서 위의 쿼리를 where 절에서 subquery로 넣었고 다중 행을 출력하므로 in을 사용했다.
위 쿼리 결과로 나온 아이템이 parent 아이템인 아이템을 뽑아야 하므로 where 절은 다음과 같이 된다.
where parent_item_id in (select a.item_id
from item_info a, item_tree b
where a.item_id = b.parent_item_id
and a.rarity = 'RARE')
parent_item_id 컬럼은 item_tree 테이블에 있지만, item_id, item_name, 그리고 rarity를 출력해야 하는데, 이 컬럼은 item_info 테이블에 있으므로
item_info 테이블과 item_tree 테이블을 모두 사용해야 했다.
따라서 'c.item_id = d.item_tree' 조건을 주어 암시적 inner join을 이용했고 최종 코드는 아래와 같이 나왔다.
풀이
select c.item_id, c.item_name, c.rarity
from item_info c, item_tree d
where d.parent_item_id in (select a.item_id
from item_info a, item_tree b
where a.item_id = b.parent_item_id
and a.rarity = 'RARE')
and c.item_id = d.item_id
order by c.item_id desc
반응형