> 데이터 베이스 > MySQL 튜토리얼 > 계층적 데이터를 탐색하기 위해 SQL Server에서 재귀적 자체 조인을 수행하려면 어떻게 해야 합니까?

계층적 데이터를 탐색하기 위해 SQL Server에서 재귀적 자체 조인을 수행하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2025-01-17 15:41:09
원래의
202명이 탐색했습니다.

How Can I Perform Recursive Self-Joins in SQL Server to Traverse Hierarchical Data?

SQL Server 재귀적 자체 조인: 쉬운 방법

데이터베이스 관리에서 재귀적 셀프 조인은 테이블이 계층적 데이터를 순회할 수 있도록 여러 번 셀프 조인할 수 있는 기술입니다. SQL Server에서는 재귀 쿼리를 통해 이를 수행할 수 있습니다.

다음 시나리오를 고려해 보세요. 다음 열이 포함된 "Person"이라는 테이블이 있습니다.

<code>PersonID | Initials | ParentID</code>
로그인 후 복사

이 테이블은 각 사람이 "이니셜" 열을 가지며 다른 사람을 참조하는 "ParentID"를 가질 수 있는 계층 구조를 나타냅니다.

"Person" 테이블에서 재귀적 셀프 조인을 수행하려면 아래와 같이 공통 테이블 표현식(CTE)을 사용할 수 있습니다.

<code class="language-sql">WITH q AS 
(
    SELECT  *
    FROM    Person
    WHERE   ParentID IS NULL 
    UNION ALL
    SELECT  m.*
    FROM    Person m
    JOIN    q
    ON      m.parentID = q.PersonID
)
SELECT  *
FROM    q</code>
로그인 후 복사

이 CTE에서는:

  1. 초기 쿼리는 "Person" 테이블에서 "ParentID"가 NULL이며 최종 조상을 나타내는 모든 행을 선택합니다.
  2. CTE의 재귀 부분은 "Person" 테이블에서 "ParentID"가 "q" CTE의 "PersonID"와 일치하는 행을 선택합니다. 이 단계는 계층 구조를 효과적으로 확장합니다.
  3. 마지막 쿼리는 "q" CTE의 모든 행을 선택하여 계층적 데이터를 제공합니다.

트리의 순서를 유지하기 위해 다음과 같이 재귀 쿼리에 정렬 조건을 추가할 수 있습니다.

<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    Person 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    Person m
    JOIN    q
    ON      m.parentID = q.PersonID
)
SELECT  *
FROM    q
ORDER BY
        bc</code>
로그인 후 복사

ORDER BY 조건을 변경하여 계층 구조에서 형제 요소의 순서를 제어할 수 있습니다.

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

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