프로그래머스/쿼리

[mysql] SELECT - 특정 세대의 대장균 찾기

have a good time 2025. 3. 19. 12:59

 

재귀 이용

WITH RECURSIVE EcoliHierarchy AS (
    -- 1세대 대장균: PARENT_ID가 NULL인 개체
    SELECT ID, PARENT_ID, 1 AS generation
    FROM ECOLI_DATA
    WHERE PARENT_ID IS NULL
    
    UNION ALL
    
    -- 2세대 대장균: 부모가 1세대인 개체
    SELECT e.ID, e.PARENT_ID, eh.generation + 1
    FROM ECOLI_DATA e
    JOIN EcoliHierarchy eh ON e.PARENT_ID = eh.ID
    WHERE eh.generation = 1
    
    UNION ALL
    
    -- 3세대 대장균: 부모가 2세대인 개체
    SELECT e.ID, e.PARENT_ID, eh.generation + 1
    FROM ECOLI_DATA e
    JOIN EcoliHierarchy eh ON e.PARENT_ID = eh.ID
    WHERE eh.generation = 2
)

-- 3세대 대장균의 ID 출력
SELECT ID
FROM EcoliHierarchy
WHERE generation = 3
ORDER BY ID;