본문 바로가기

Programming/postgreSQL

postgreSQL recursive 재귀함수

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