[SQL 고득점 Kit-MySQL] 특정 세대의 대장균 찾기

코린이·2025년 2월 19일

SQL 문제 풀이 (MySQL)

목록 보기
32/96

❓ 문제

3세대의 대장균의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 이때 결과는 대장균의 ID 에 대해 오름차순 정렬해주세요.

❗️ 문제 풀이

inner join 방식

ID가 8인 경우 4세대이므로 WHERE 문에 마지막 1세대가 NULL인 조건을 추가한다.

SELECT A.ID
FROM ECOLI_DATA A JOIN ECOLI_DATA B
    ON A.PARENT_ID = B.ID
JOIN ECOLI_DATA C
    ON B.PARENT_ID = C.ID
WHERE C.PARENT_ID IS NULL
ORDER BY 1
;

✅ 재귀쿼리 방식

WITH RECURSIVE TMP_TABLE AS (
    SELECT 
        ID, 
        PARENT_ID, 
        1 AS N                 # 재귀 초기값
    FROM ECOLI_DATA
    WHERE PARENT_ID IS NULL    # 재귀 쿼리 종료 조건
   
    UNION ALL
   
    SELECT 
        A.ID, 
        A.PARENT_ID, 
        B.N + 1 AS N           # 재귀값 카운트(세대 카운트)
    FROM ECOLI_DATA A
   
    JOIN TMP_TABLE B 
        ON A.PARENT_ID = B.ID
)
SELECT ID
FROM TMP_TABLE
WHERE N = 3
ORDER BY ID
;

🔗 Reference

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

0개의 댓글