programmers lv2 업그레이드 된 아이템 구하기
item_A -> item_B , 즉 아이템 a는 아이템b로 업그레이드 가능하다.
이때 a는 root 이자 b의 Parent item 이다.
아이템의 희귀도가 'rare'인 아이템들의 모든 다음 업그레이드 아이템의 정보(id, name, rarity)
table : item_info (item_id, item_name, rarity, price)
, item_tree (item_id, parent_item_id)
구해야하는 것은 아이템의 희귀도가 'rare'인 아이템의 정보가 아니다.
아이템의 희귀도가 'rare'인 아이템의 모든 다음업그레드 아이템의 정보이다.
1.parent_item_id의 id가 rarity='rare'인 경우를 추출하고,
-> 
2.그 id의 정보를 추출해야 하는 것이다.
-> 
select ii.item_id, ii.item_name,ii.rarity
from item_info ii
join item_tree it on ii.item_id = it.item_id
where it.parent_item_id in
(select item_id
from item_info
where rarity = 'rare')
order by ii.item_id desc
포인트는
item_tree의 parent_item_id가 item_info의 id (rarity='rare'인) 와 일치해야한다는 조건을 join 후 서브쿼리로 구현한 것이다.
이것을 구현하는 방법이 헷갈렸었다.
self join 에 대한 설명과 유사하여 정리해보려고 한다.

경리부장의 직속상관의 연락처를 알아야하는상황으로 한 Table안에 두 열을 서로 join 하지 않고는 풀기 어렵다.
select a.emp "직원", b.emp "직속상관", b.phone "직속상관연락처"
from emp_table a
inner join emp_table b on a.manager = b.emp
where a.emp = "경리부장";
a를 직원테이블 , b를 직속상관 테이블로 만들어버리는 것이다.
: join 시 a의 직속상관이 b의 직원이 되게 만들고, 각각의 table에서 필요한 열들을 select하여 표시하면 된다.
어떻게 조인하여 어떤 것을 가져올 수 있을까를 항상 고민하여 쿼리를 짜야겠다.
-- rarity가 rare인 item이 parent item id가 있을지 뽑고 또 info가서 정보출력하기
with rare_id as (
select item_id
from item_info
where rarity= 'rare')
, upgrade_id as (
select t.item_id
from item_tree t
join rare_id r
where t.parent_item_id = r.item_id)
select i.item_id,i.item_name, i.rarity
from item_info i
join upgrade_id u on u.item_id = i.item_id
where i.item_id = u.item_id
order by item_id desc