코딩테스트

[26.02.11 코테(MySQL/Oracle)]-특정 세대의 대장균 찾기

지니248 2026. 2. 11. 13:42

Lv4. 특정 세대의 대장균 찾기 (MySQL)

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

 

내가 작성한 코드

-- 풀이1 (JOIN)
SELECT E3.ID
FROM ECOLI_DATA E1
JOIN ECOLI_DATA E2
  ON E1.ID = E2.PARENT_ID
JOIN ECOLI_DATA E3
  ON E2.ID = E3.PARENT_ID
WHERE E1.PARENT_ID IS NULL
ORDER BY E3.ID;

-- 풀이2 (IN)
SELECT ID
FROM ECOLI_DATA
WHERE PARENT_ID IN (SELECT ID
                    FROM ECOLI_DATA
                    WHERE PARENT_ID IN (SELECT ID
                                        FROM ECOLI_DATA
                                        WHERE PARENT_ID IS NULL))
ORDER BY ID;

 

Oracle

-- Oracle
-- 계층형 쿼리 (CONNECT BY)
SELECT ID
FROM ECOLI_DATA
WHERE LEVEL = 3 -- 계층 구조를 만든 후 3세대에 해당하는 데이터만 골라냄
START WITH PARENT_ID IS NULL -- 부모ID가 없는 최상위 개체부터 탐색을 시작하겠다는 의미
CONNECT BY PRIOR ID = PARENT_ID -- 이전 단계(PRIOR)의 ID와 현재 단계의 PARENT_ID를 연결
ORDER BY ID;

 

PRIOR의 위치에 따라 탐색 방향이 달라진다

  • PRIOR ID = PARENT_ID 
    • 순방향 (부모→자식)
  • ID = PRIOR PARENT_ID
    • 역방향 (자식 →부모)