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