문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/301650

입출력 예

풀이
WITH RECURSIVE ECOLI_TREE AS (
SELECT ID,
PARENT_ID,
1 AS 'DEPTH'
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL
UNION ALL
SELECT e.ID,
e.PARENT_ID,
t.depth + 1 AS 'DEPTH'
FROM ECOLI_DATA e
INNER JOIN ECOLI_TREE t
ON e.PARENT_ID = t.ID
)
SELECT ID
FROM ECOLI_TREE
WHERE DEPTH = 3
ORDER BY ID;
ㄴ 재귀 사용
SELECT C.ID
FROM ECOLI_DATA A
INNER JOIN ECOLI_DATA B ON A.ID = B.PARENT_ID
INNER JOIN ECOLI_DATA C ON B.ID = C.PARENT_ID
WHERE A.PARENT_ID IS NULL
ORDER BY ID;
ㄴ JOIN만 사용
후기
보자마자 재귀를 써야겠다고 생각했다.
MySQL에서는 오라클에서 사용하는 START WITH 계층형 쿼리를 사용할 수 없기 때문에 WITH RECURSIVE를 사용해야 한다.
깊이가 3밖에 안 돼서 그냥 JOIN만으로도 풀 수 있었지만 깊이가 깊어지면 이 방식은 불편해질 수 있다.
'코딩테스트 (프로그래머스) > SQL' 카테고리의 다른 글
| [프로그래머스][MySQL][Lv. 2] 조건에 맞는 사원 정보 조회하기 (0) | 2026.02.07 |
|---|---|
| [프로그래머스][MySQL][Lv. 3] 대장균의 크기에 따라 분류하기 2 (0) | 2025.12.31 |
| [프로그래머스][MySQL][Lv. 1] 특정 옵션이 포함된 자동차 리스트 구하기 (0) | 2023.05.21 |
| [프로그래머스][MySQL][Lv. 3] 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2023.05.21 |
| [프로그래머스][MySQL][Lv. 2] 자동차 평균 대여 기간 구하기 (0) | 2023.05.21 |