728x90
WITH RECURSIVE cte_name (column1, column2, ...)
AS(
-- anchor member
SELECT select_list FROM table1 WHERE condition
UNION [ALL]
-- recursive term
SELECT select_list FROM cte_name WHERE recursive_condition
)
SELECT * FROM cte_name
WITH RECURSIVE SUBORDINATES AS (
SELECT EMPLOYEE_ID
, MANAGER_ID
, NAME
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 1
UNION
SELECT E.EMPLOYEE_ID
, E.MANAGER_ID
, E.NAME
FROM EMPLOYEES E
JOIN SUBORDINATES S
ON S.EMPLOYEE_ID = E.MANAGER_ID
)
SELECT * FROM SUBORDINATES
anchor member에서 조회한 결과를 cte_name에 저장
anchor member에서 조회한 결과와 recursive term에서 조회한 결과를 UNION [ALL]
recursive term에서 조회한 결과를 cte_name에 저장
앞의 실행된 결과와 recursive term(2)에서 조회한 결과를 UNION [ALL]
recursive term(2)에서 조회한 결과가 없으면 종료 있으면 반복
728x90
'Programming > postgreSQL' 카테고리의 다른 글
postgreSQL 데이터 타입 bool boolean char character varchar text int integer float double serial (0) | 2025.03.19 |
---|---|
postgreSQL upsert insert update (0) | 2025.03.19 |
postgreSQL GROUPING CUBE ROLLUP SQL 실행 순서 (0) | 2025.03.18 |
postgreSQL true false null (0) | 2025.03.18 |
postgreSQL LIMIT OFFSET FETCH (0) | 2025.03.18 |