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
반응형
'DB' 카테고리의 다른 글
[DB] SELECT Query VS VIEW (0) | 2024.03.05 |
---|---|
[DB] VERTICA ifnull coalesce (0) | 2024.02.29 |
[DB] postgresql TEXT vs VARCHAR vs JSON 타입은 언제 써야하나? (1) | 2023.11.22 |
[DB] MySQL CURRENT_TIMESTAMP (0) | 2023.10.05 |
[CURSOR PAGING] 커서 페이징처리. (2) | 2022.08.31 |