이처럼 데이터를 레벨별로 구분할 수 있으면 단순히 사번별로 조회하는 것이 아니라 관리자 계층별로 조회할 수 있는데, 이때 사용하는 것이 계층형 쿼리입니다. 계층형 쿼리는 재귀 CTE로 만들 수 있습니다.
코드 11-9
WITH RECURSIVE cte1 AS (
①
SELECT 1 level, employee_id, emp_name, CAST(employee_id AS CHAR(200)) path FROM emp_hierarchy WHERE manager_id IS NULL
UNION ALL
②
SELECT level + 1, b.employee_id, b.emp_name, CONCAT(a.path, ',', b.employee_id) FROM cte1 a INNER JOIN emp_hierarchy b ON a.employee_id = b.manager_id
)
③
SELECT employee_id, emp_name, level, path, CONCAT(LPAD('', 2 * level, ' '), emp_name) hier_name FROM cte1 ORDER BY path;