계층적 데이터 구조를 탐색하는 것은 복잡할 수 있습니다. SQL Server의 재귀 공통 테이블 표현식(CTE)은 셀프 조인을 사용하여 이러한 트리 구조를 탐색하기 위한 강력한 솔루션을 제공합니다.
범주 테이블과 같은 일반적인 계층적 데이터 모델을 생각해 보세요.
<code class="language-sql">CREATE TABLE Categories ( Id int PRIMARY KEY, Name nvarchar(MAX), ParentId int FOREIGN KEY REFERENCES Categories(Id) );</code>
이 디자인은 임의 깊이의 중첩된 카테고리를 허용합니다. 아래 표시된 것처럼 이 계층 구조를 시각화하면 표준 SQL 쿼리를 사용하여 전체 계보를 검색하는 것이 어렵다는 점을 알 수 있습니다.
[카테고리 계층 이미지 삽입]
재귀적 CTE는 이 문제를 우아하게 해결합니다. 다음 쿼리는 카테고리와 전체 상위 항목을 검색하는 방법을 보여줍니다.
<code class="language-sql">WITH RecursiveCategoryCTE AS ( SELECT c.Id, c.Name, CAST(c.Name AS nvarchar(MAX)) AS Path FROM Categories AS c WHERE c.ParentId IS NULL UNION ALL SELECT t.Id, t.Name, CAST(r.Path + ',' + t.Name AS nvarchar(MAX)) AS Path FROM RecursiveCategoryCTE AS r JOIN Categories AS t ON t.ParentId = r.Id ) SELECT c.Id, c.Name, c.Path FROM RecursiveCategoryCTE AS c WHERE c.Name = 'Business Laptops';</code>
RecursiveCategoryCTE
는 루트 범주(여기서 ParentId
는 NULL)를 선택하는 것으로 시작됩니다.Categories
테이블에 재귀적으로 다시 조인하여 Path
열을 작성하여 상위 이름을 축적합니다.SELECT
문은 대상 범주('비즈니스 노트북') 및 생성된 상위 경로를 필터링합니다.결과는 다음과 같습니다.
Id | Name | Path |
---|---|---|
12 | Business Laptops | Computers,Laptops,Business Laptops |
이 기술은 다음을 포함한 다양한 응용 분야에서 유용합니다.
이 접근 방식은 SQL Server 내에서 계층적 데이터를 탐색하기 위한 간결하고 효율적인 방법을 제공합니다.
위 내용은 SQL Server의 재귀적 자체 조인은 어떻게 계층적 데이터를 효율적으로 검색할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!