DB

[DB] postgresql recursive 재귀쿼리

girin_dev 2023. 12. 7. 23:31
728x90
반응형

 

1. 부서의 cd를 상위 부서 (upper_dept)로 가지는 모든 하위 부서 찾기.

 

-- 계층형 db 탐색을 위한 재귀쿼리
WITH RECURSIVE find_dept(dept_cd, dept_name, upper_dept, dept_depth ) AS (
	--1 select 
	SELECT dept_cd, dept_name, upper_dept, dept_depth  
	FROM dept
	WHERE 1=1 
	AND dept_cd = '첫번째_DEPT'
    
	UNION 
    
	--2 repeat 
	SELECT dept_cd, dept_name, upper_dept, dept_depth
	FROM find_dept fnd_dpt
	INNER JOIN dept d ON fnd_dpt.upper_dept = d.dept_cd
    AND d.dept_cd != '첫번째_DEPT'
)

SELECT * FROM find_dept;

 

 

2. 주의해야 할 점은 재귀를 통해 본인으로 다시 돌아올 수 있는 순환 구조다.

따라서 다음 조건이 들어가야 한다.

AND d.dept_cd != '첫번째_DEPT' -- 첫번째 시작 조건을 막아서 무한 루프 방지

 

잘못된 데이터일수도, 의도된 데이터 일수도 있지만, 무한 루프만은 막아야한다.

320x100
반응형