개발/SQL

프로그래머스SQL_특정 세대의 대장균 찾기

송디 2024. 5. 5. 11:14

출처 : 프로그래머스

■ 사용 문법 

서브 쿼리, IS NULL

 

■ 사용 방법

서브쿼리를 이용해 자식 ID를 찾아 3세대 까지 이동하였다. 

다만, 내 방식에는 반복이 계속되었는데 3세대가 아니라 10세대를 구하라고 했다면 풀기 힘들 것이다. 

찾아보니 WITH RECURSIVE 를 사용하여 재귀 문제를 풀 수 있었다.  

 

■ 코드

-- 코드를 작성해주세요
SELECT C.ID
FROM ECOLI_DATA AS C,
    (
        SELECT A.ID
        FROM ECOLI_DATA AS A,
        (SELECT ID
        FROM ECOLI_DATA
        WHERE PARENT_ID IS NULL) AS B
        WHERE A.PARENT_ID = B.ID
    ) AS D
WHERE C.PARENT_ID = D.ID
ORDER BY C.ID

 

*WITH RECURSIVE 사용

WITH RECURSIVE GEN_DATA AS (
    SELECT 
        ID,
        PARENT_ID,
        1 AS GEN
    FROM ECOLI_DATA
    WHERE PARENT_ID IS NULL
    UNION ALL
    SELECT
        A.ID,
        A.PARENT_ID,
        (GEN + 1) AS GEN
    FROM ECOLI_DATA AS A
    INNER JOIN GEN_DATA g ON A.PARENT_ID = g.ID
)
SELECT ID FROM GEN_DATA WHERE GEN = 3 ORDER BY ID

참조 : https://im-codding.tistory.com/82

728x90