직원 계층 구조를 위한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!