
1. 문제설명


2. 접근방식 & 정답코드
문제만 읽어도 아이템이 상위 아이템으로 업그레이드 될 수 있는 걸 보니, 계층구조를 가지고 있다고 보여진다.
1. 먼저 ITEM_INFO테이블에서 RARITY 가 'RARE'인 아이템들의 ITEM_ID 값을 찾는다.
2. ITEM_INFO 테이블의 ITEM_ID랑 ITEM_TREE의 PARENT_ITEM_ID가 같다는 조건으로 ITEM_INFO와 ITEM TREE 테이블을 조인했다. WHERE 절에 1조건을 달아서 ITEM_TREE.PARENT_ITEM_ID가 1조건 에 해당하는지 찾아 준다.

계속 틀린다....ㅋㅋㅋㅋㅋㅋㅋㅋ
아이고 머리야

🐦 JOIN 1번 하는 정답코드
SELECT ITEM_INFO.ITEM_ID, ITEM_INFO.ITEM_NAME, ITEM_INFO.RARITY
FROM ITEM_INFO
JOIN ITEM_TREE ON ITEM_INFO.ITEM_ID = ITEM_TREE.ITEM_ID
WHERE ITEM_TREE.PARENT_ITEM_ID IN (
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE'
)
ORDER BY ITEM_INFO.ITEM_ID DESC;
왜 틀렸는지 머리가 아프면 코드를 한 줄씩 한글로 써 보자.
난 한 글로 써 본 뒤에 이해를 하게 되었다...
처음에 조인 조건이 틀려서 오답처리가 된 것이었다.
처음에 조인 조건을 잘못 설정했다.
나는 계층 구조이니까 아무런 생각 없이 ITEM_INFO.ITEM_ID와 ITEM_TREE.PARENT_ITEM_ID를 연결하려고 했던 점에서 실수가 있었다. 실제로는 **ITEM_INFO.ITEM_ID와 ITEM_TREE.ITEM_ID**가 연결되어야 한다.
왜냐하면 부모 아이템을 찾아주는 건 WHERE 절에서 처리하고 있기 때문에 결국 WHERE 절에서 ITEM_TREE.PARENT_ITEM_ID 조건으로 'RARE' 아이템의 ID를 찾고, 테이블 JOIN은 ITEM_INFO.ITEM_ID = ITEM_TREE.ITEM_ID로 연결 되는 것이다.
🐦 JOIN 두 번 하는 정답코드
SELECT ITEM_INFO.ITEM_ID, ITEM_INFO.ITEM_NAME, ITEM_INFO.RARITY
FROM ITEM_INFO
JOIN ITEM_TREE AS CHILD_TREE ON ITEM_INFO.ITEM_ID = CHILD_TREE.ITEM_ID
JOIN ITEM_TREE AS PARENT_TREE ON CHILD_TREE.PARENT_ITEM_ID = PARENT_TREE.ITEM_ID
WHERE PARENT_TREE.ITEM_ID IN (
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE'
)
ORDER BY ITEM_INFO.ITEM_ID DESC;
위에서 써 준 쿼리를 두 번의 JOIN을 사용하는 방식으로 바꿔보았다.
ITEM_TREE 테이블을 두 번 조인하여 PARENT_ITEM_ID와 ITEM_ID를 각각 연결한 것이다.
첫 번째 JOIN (CHILD_TREE)에서는 ITEM_INFO와 ITEM_TREE 테이블을 연결한다. 여기서 ITEM_TREE.ITEM_ID와 ITEM_INFO.ITEM_ID를 연결하여 아이템 정보를 가져온다.
두 번째 JOIN (PARENT_TREE)에서는 ITEM_TREE 테이블을 다시 조인하여, PARENT_ITEM_ID가 실제로 부모 아이템의 ITEM_ID와 일치하는 부분을 찾는다. 이 조인은 부모 아이템에 대한 정보를 찾아주는 역할을 한다.
WHERE 절에서 PARENT_TREE.ITEM_ID가 희귀도 'RARE'인 아이템의 ID와 일치하는 아이템만 선택해 준다.
'Algorithm > SQL테스트' 카테고리의 다른 글
[프로그래머스] 👩🏻💻 (MySQL) 연도별 대장균 크기의 편차 구하기 (80) | 2024.11.20 |
---|---|
[프로그래머스] 👩🏻💻 (MySQL) 물고기 종류 별 대어 찾기 (44) | 2024.11.20 |
[프로그래머스] 👩🏻💻 (MySQL) SUM, MAX, MIN 문제 풀이 (49) | 2024.11.19 |
[프로그래머스] 👩🏻💻 (MySQL) 특정 형질을 가지는 대장균 찾기 문제 풀이 (4) | 2024.11.19 |
[프로그래머스] 👩🏻💻 (MySQL) 특정 형질을 가지는 대장균 찾기 문제 풀이 (47) | 2024.11.19 |

1. 문제설명


2. 접근방식 & 정답코드
문제만 읽어도 아이템이 상위 아이템으로 업그레이드 될 수 있는 걸 보니, 계층구조를 가지고 있다고 보여진다.
1. 먼저 ITEM_INFO테이블에서 RARITY 가 'RARE'인 아이템들의 ITEM_ID 값을 찾는다.
2. ITEM_INFO 테이블의 ITEM_ID랑 ITEM_TREE의 PARENT_ITEM_ID가 같다는 조건으로 ITEM_INFO와 ITEM TREE 테이블을 조인했다. WHERE 절에 1조건을 달아서 ITEM_TREE.PARENT_ITEM_ID가 1조건 에 해당하는지 찾아 준다.

계속 틀린다....ㅋㅋㅋㅋㅋㅋㅋㅋ
아이고 머리야

🐦 JOIN 1번 하는 정답코드
SELECT ITEM_INFO.ITEM_ID, ITEM_INFO.ITEM_NAME, ITEM_INFO.RARITY FROM ITEM_INFO JOIN ITEM_TREE ON ITEM_INFO.ITEM_ID = ITEM_TREE.ITEM_ID WHERE ITEM_TREE.PARENT_ITEM_ID IN ( SELECT ITEM_ID FROM ITEM_INFO WHERE RARITY = 'RARE' ) ORDER BY ITEM_INFO.ITEM_ID DESC;
왜 틀렸는지 머리가 아프면 코드를 한 줄씩 한글로 써 보자.
난 한 글로 써 본 뒤에 이해를 하게 되었다...
처음에 조인 조건이 틀려서 오답처리가 된 것이었다.
처음에 조인 조건을 잘못 설정했다.
나는 계층 구조이니까 아무런 생각 없이 ITEM_INFO.ITEM_ID와 ITEM_TREE.PARENT_ITEM_ID를 연결하려고 했던 점에서 실수가 있었다. 실제로는 **ITEM_INFO.ITEM_ID와 ITEM_TREE.ITEM_ID**가 연결되어야 한다.
왜냐하면 부모 아이템을 찾아주는 건 WHERE 절에서 처리하고 있기 때문에 결국 WHERE 절에서 ITEM_TREE.PARENT_ITEM_ID 조건으로 'RARE' 아이템의 ID를 찾고, 테이블 JOIN은 ITEM_INFO.ITEM_ID = ITEM_TREE.ITEM_ID로 연결 되는 것이다.
🐦 JOIN 두 번 하는 정답코드
SELECT ITEM_INFO.ITEM_ID, ITEM_INFO.ITEM_NAME, ITEM_INFO.RARITY FROM ITEM_INFO JOIN ITEM_TREE AS CHILD_TREE ON ITEM_INFO.ITEM_ID = CHILD_TREE.ITEM_ID JOIN ITEM_TREE AS PARENT_TREE ON CHILD_TREE.PARENT_ITEM_ID = PARENT_TREE.ITEM_ID WHERE PARENT_TREE.ITEM_ID IN ( SELECT ITEM_ID FROM ITEM_INFO WHERE RARITY = 'RARE' ) ORDER BY ITEM_INFO.ITEM_ID DESC;
위에서 써 준 쿼리를 두 번의 JOIN을 사용하는 방식으로 바꿔보았다.
ITEM_TREE 테이블을 두 번 조인하여 PARENT_ITEM_ID와 ITEM_ID를 각각 연결한 것이다.
첫 번째 JOIN (CHILD_TREE)에서는 ITEM_INFO와 ITEM_TREE 테이블을 연결한다. 여기서 ITEM_TREE.ITEM_ID와 ITEM_INFO.ITEM_ID를 연결하여 아이템 정보를 가져온다.
두 번째 JOIN (PARENT_TREE)에서는 ITEM_TREE 테이블을 다시 조인하여, PARENT_ITEM_ID가 실제로 부모 아이템의 ITEM_ID와 일치하는 부분을 찾는다. 이 조인은 부모 아이템에 대한 정보를 찾아주는 역할을 한다.
WHERE 절에서 PARENT_TREE.ITEM_ID가 희귀도 'RARE'인 아이템의 ID와 일치하는 아이템만 선택해 준다.
'Algorithm > SQL테스트' 카테고리의 다른 글
[프로그래머스] 👩🏻💻 (MySQL) 연도별 대장균 크기의 편차 구하기 (80) | 2024.11.20 |
---|---|
[프로그래머스] 👩🏻💻 (MySQL) 물고기 종류 별 대어 찾기 (44) | 2024.11.20 |
[프로그래머스] 👩🏻💻 (MySQL) SUM, MAX, MIN 문제 풀이 (49) | 2024.11.19 |
[프로그래머스] 👩🏻💻 (MySQL) 특정 형질을 가지는 대장균 찾기 문제 풀이 (4) | 2024.11.19 |
[프로그래머스] 👩🏻💻 (MySQL) 특정 형질을 가지는 대장균 찾기 문제 풀이 (47) | 2024.11.19 |