집 >데이터 베이스 >MySQL 튜토리얼 >SQL Server의 재귀적 자체 조인을 사용하여 직원 계층 구조를 검색하려면 어떻게 해야 합니까?
직원 계층 구조를 위한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!