더북(TheBook)

이처럼 데이터를 레벨별로 구분할 수 있으면 단순히 사번별로 조회하는 것이 아니라 관리자 계층별로 조회할 수 있는데, 이때 사용하는 것이 계층형 쿼리입니다. 계층형 쿼리는 재귀 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;
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.