MySQL 프로그래머스 | 업그레이드 된 아이템 구하기 (부모 노드, 자식 노드)

    728x90

     

    문제

    https://school.programmers.co.kr/learn/courses/30/lessons/273711

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

    • 아이템의 희귀도가 'RARE'인 아이템
    • 다음 업그레이드 아이템의 ITEM_ID, ITEM_NAME, RARITY를 출력하는 SQL문 작성
      • ITEM_A → ITEM_B → ITEM_C 와 같이 업그레이드 가능한 아이템이 있을 때
        • 'ITEM_C'의 PARENT 아이템은 'ITEM_B'
        • 'ITEM_B'의 PARENT 아이템은 'ITEM_A'
        • 'ITEM_A'는 ROOT 아이템
    • ITEM_ID 기준 내림차순 정렬

     

    테이블

    ITEM_INFO ITEM_TREE

     

    풀이과정

    (1) ITEM_INFO 테이블과 ITEM_TREE 테이블 LEFT 조인

    1
    2
    3
    4
    SELECT *
    FROM ITEM_TREE IT
    LEFT JOIN ITEM_INFO II
    ON IT.ITEM_ID = II.ITEM_ID
    cs

     

    (2) 다음 업그레이드 아이템을 조회해야 하므로

    이전 아이템이 없는 ROOT인 경우 제거하기(NULL이 아니어야 함)

    1
    2
    3
    4
    SELECT II.ITEM_ID, II.ITEM_NAME, II.RARITY
    FROM ITEM_INFO II, ITEM_TREE IT
    WHERE (II.ITEM_ID = IT.ITEM_ID) AND IT.PARENT_ITEM_ID IS NOT NULL
    ORDER BY II.ITEM_ID DESC
    cs

     

    (3) 문제에서 요구한 'RARE' 아이템에 대한 다음 업그레이드 아이템 조회하기

    1
    2
    3
    4
    5
    6
    7
    SELECT IT.ITEM_ID, II.ITEM_NAME, II.RARITY
    FROM ITEM_TREE IT
    LEFT JOIN ITEM_INFO II
    ON IT.ITEM_ID = II.ITEM_ID
    WHERE IT.PARENT_ITEM_ID IN (SELECT ITEM_ID
    FROM ITEM_INFO WHERE RARITY = 'RARE')
    ORDER BY IT.ITEM_ID DESC
    cs

    728x90

    댓글