> 데이터 베이스 > MySQL 튜토리얼 > SQL Server의 재귀적 자체 조인을 사용하여 직원 계층 구조를 검색하려면 어떻게 해야 합니까?

SQL Server의 재귀적 자체 조인을 사용하여 직원 계층 구조를 검색하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2025-01-17 15:26:08
원래의
335명이 탐색했습니다.

How Can a Recursive Self-Join in SQL Server Be Used to Retrieve an Employee Hierarchy?

직원 계층 구조를 위한 SQL Server 재귀적 자체 조인

SQL Server의 재귀적 셀프 조인은 계층적 데이터 구조를 탐색하는 강력한 기술입니다. 각 직원이 고유한 ID와 감독자의 ID를 갖는 직원 테이블을 사용하여 이를 설명해 보겠습니다.

직원 테이블 예:

<code>| EmployeeID | Name       | ManagerID |
|------------|------------|------------|
| 1          | John Doe   | NULL       |
| 2          | Jane Smith | 1          |
| 3          | Mary Jones | 2          |
| 4          | Bob Johnson| 3          |</code>
로그인 후 복사

도전:

우리의 목표는 특정 관리자(예: John Doe) 아래의 전체 직원 계층 구조를 검색하는 것입니다. 재귀적 셀프 조인은 우아한 솔루션을 제공합니다.

해결책:

WITH 문(공통 테이블 표현식 또는 CTE)을 사용하여 이를 달성할 수 있습니다.

<code class="language-sql">WITH EmployeeHierarchy AS (
  SELECT
    EmployeeID,
    Name,
    ManagerID
  FROM
    employees
  WHERE
    ManagerID IS NULL  -- Start with the top-level employee (no manager)
  UNION ALL
  SELECT
    e.EmployeeID,
    e.Name,
    e.ManagerID
  FROM
    employees e
  JOIN
    EmployeeHierarchy q
    ON e.ManagerID = q.EmployeeID  -- Recursively join to itself
)
SELECT
  *
FROM
  EmployeeHierarchy;</code>
로그인 후 복사

이 쿼리는 루트 직원(관리자 없음)으로 시작하여 employees 테이블을 CTE(EmployeeHierarchy)에 재귀적으로 조인하여 모든 하위 직원이 포함될 때까지 계층 구조를 수준별로 확장합니다.

계층적 순서 유지:

올바른 계층적 순서를 유지하기 위해 쿼리를 향상할 수 있습니다.

<code class="language-sql">WITH EmployeeHierarchy AS (
  SELECT
    EmployeeID,
    Name,
    ManagerID,
    CAST(ROW_NUMBER() OVER (ORDER BY EmployeeID) AS VARCHAR(MAX)) AS HierarchyPath
  FROM
    employees
  WHERE
    ManagerID IS NULL
  UNION ALL
  SELECT
    e.EmployeeID,
    e.Name,
    e.ManagerID,
    q.HierarchyPath + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY e.ManagerID ORDER BY e.EmployeeID) AS VARCHAR(MAX))
  FROM
    employees e
  JOIN
    EmployeeHierarchy q
    ON e.ManagerID = q.EmployeeID
)
SELECT
  *
FROM
  EmployeeHierarchy
ORDER BY
  HierarchyPath;</code>
로그인 후 복사

이 향상된 쿼리는 HierarchyPath 열을 추가하여 각 직원에 대한 고유한 경로를 생성하고 최종 출력에서 ​​적절한 계층적 정렬을 보장합니다. ROW_NUMBER() 함수와 문자열 연결은 부모-자식 관계를 유지합니다.

위 내용은 SQL Server의 재귀적 자체 조인을 사용하여 직원 계층 구조를 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿