블로그 이름

[MariaDB] ORACLE의 STARTWITH절을 MariaDB에서 사용 본문

개발/Database

[MariaDB] ORACLE의 STARTWITH절을 MariaDB에서 사용

Hide 2025. 4. 28. 22:54

Oracle 에서 사용하는 START WITH 절 쿼리를 MariaDB로 작성해야 하는 일이 있었다.

MariaDB는 CONNECT BY가 없어서 ORACLE의 쿼리를 그대로 사용할 수 없다.

 

오라클 쿼리 예시

SELECT id, parent_id, name

FROM depts

START WITH parent_id IS NULL

CONNECT BY PRIOR id = parent_id

ORDER SIBLINGS BY name;

 

해당 쿼리를 MariaDB 쿼리로 변경 시 아래와 같다.

WITH RECURSIVE cte AS (
    SELECT id, parent_id, name, 0 AS level
    FROM DEPTS
    WHERE parent_id IS NULL
    UNION ALL
    SELECT t.id, t.parent_id, t.name, cte.level + 1 AS level
    FROM DEPTS t  INNER JOIN cte ON t.parent_id = cte.id
)
SELECT id, parent_id, name, level
FROM cte

ORDER BY level

 

WITH RECURSIVE로 재귀 사용, level로 계층 깊이를 관리하면 된다. (oracle의 경우 ㅁ조회 순서대로 자동 정렬되지만 maraidb의 경우 정렬이 풀려버리기 때문에 level을 사용하여 순서를 유지하여야함) 

 

오늘은 ORACLE의 START WITH 절을 MARIADB로 포팅하는 방법을 알아보았다.