계층적 데이터를 위한 SQL Server의 재귀적 자체 조인 마스터하기
재귀적 자체 조인은 SQL Server 테이블 내의 계층적 데이터 구조를 탐색하는 데 필수적입니다. 이 기술은 조직도나 가계도와 같이 부모-자식 관계로 정리된 데이터를 처리할 때 특히 유용합니다.
재귀적 자체 조인에 대한 간단한 접근 방식은 공통 테이블 표현식(CTE)을 사용합니다.
<code class="language-sql">WITH q AS ( SELECT * FROM mytable WHERE ParentID IS NULL UNION ALL SELECT m.* FROM mytable m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q;</code>
이 쿼리는 재귀 CTE q
를 정의합니다. 초기 SELECT
문은 루트 노드(ParentID
가 NULL인 노드)를 식별합니다. UNION ALL
는 이를 SELECT
과 CTE를 재귀적으로 결합하여 모든 하위 항목을 포함하는 후속 mytable
문과 결합합니다. 마지막 SELECT
문은 전체 계층적 데이터세트를 검색합니다.
계층적 질서 유지
원래 계층 구조와 순서를 유지하려면 수정된 쿼리가 필요합니다.
<code class="language-sql">WITH q AS ( SELECT m.*, CAST(ROW_NUMBER() OVER (ORDER BY m.PersonId) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc FROM mytable m WHERE ParentID IS NULL UNION ALL SELECT m.*, q.bc + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY m.ParentID ORDER BY m.PersonID) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN FROM mytable m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q ORDER BY bc;</code>
이 향상된 쿼리는 bc
을 사용하여 ROW_NUMBER()
열을 추가하여 고유 식별자를 할당하고 계층 구조의 각 수준 내에서 순서를 유지합니다. ORDER BY bc
절은 최종 결과가 원래 트리 구조를 반영하도록 보장합니다. ORDER BY
함수 내에서 ROW_NUMBER()
절을 조정하면 형제 노드 순서를 사용자 정의할 수 있습니다.
위 내용은 계층적 데이터를 탐색하기 위해 SQL Server에서 재귀적 자체 조인을 수행하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!