
내가 작성한 쿼리
with recursive tmp as (
select id, parent_id, 1 as generation
from ecoli_data
where parent_id is null
union all
select s.id, s.parent_id, tmp.generation + 1
from tmp join ecoli_data s
on tmp.id = s.parent_id
)
select count(*) count, generation
from tmp
where id not in (
select distinct parent_id
from tmp
where parent_id is not null)
group by generation
order by generation;
재귀 쿼리?
SQL에서 계층적 데이터를 처리하거나, 트리 구조를 탐색할 때 사용
재귀 쿼리의 주요 특징
- 자기참조: 결과 집합을 스스로 호출하여 점진적으로 확장
- 계층 구조 탐색: 부모-자식 관계 데이터를 처리
- CTE 사용:
WITH RECURSIVE
구문을 활용하여 쿼리를 작성
기본 문법
WITH RECURSIVE cte_name AS (
-- Anchor 쿼리: 초기 결과 집합을 정의
초기_쿼리
UNION ALL
-- Recursive 쿼리: 자신을 참조하여 추가 데이터를 가져옴
재귀_쿼리
)
SELECT * FROM cte_name;
- Anchor 쿼리: 재귀의 시작점 (초기 데이터).
- Recursive 쿼리: 자기 자신을 호출하여 점진적으로 결과를 확장.
- 종료 조건: 재귀 쿼리의
WHERE
조건이 종료 조건 역할.
Share article