한 줄씩 재귀 CTE 실행
재귀 공통 테이블 표현식(CTE)은 재귀 쿼리를 가능하게 하는 강력한 SQL 구문입니다. 실행 방법을 이해하려면 이를 일련의 UNION ALL 작업으로 간주하십시오.
제공된 예를 고려하십시오.
DECLARE @tbl TABLE ( Id INT , [Name] VARCHAR(20) , ParentId INT );
1-2행: 테이블 정의 구조.
3-16행: 레코드를 table.
19-24행: 재귀 CTE abcd를 정의합니다.
19행: 앵커 표현식은 CTE의 초기 반복을 정의합니다. ParentId가 NULL인 레코드를 선택합니다.
Line 20-22: 재귀 표현식은 하위 레코드를 선택하고 해당 이름을 경로 열의 상위 경로와 연결하여 CTE를 확장합니다.
25행: CTE에서 선택 abcd 최종 결과를 검색합니다.
실행 단계:
1. 다음 결과를 반환하는 앵커 표현식(19행)을 실행합니다.
Id | Name | ParentId | Path |
---|---|---|---|
1 | Europe | NULL | Europe |
2 | Asia | NULL | Asia |
2. 앵커 표현식의 결과를 사용하여 재귀 표현식(20-22행)을 실행합니다. 결과는 다음과 같습니다.
Id | Name | ParentId | Path |
---|---|---|---|
3 | Germany | 1 | Europe/Germany |
4 | UK | 1 | Europe/UK |
5 | China | 2 | Asia/China |
6 | India | 2 | Asia/India |
3. 하위 레코드가 더 이상 발견되지 않을 때까지 2단계를 반복하여 결과는 다음과 같습니다.
Id | Name | ParentId | Path |
---|---|---|---|
7 | Scotland | 4 | Europe/UK/Scotland |
8 | Edinburgh | 7 | Europe/UK/Scotland/Edinburgh |
9 | Leith | 8 | Europe/UK/Scotland/Edinburgh/Leith |
4. 각 반복의 모든 결과를 통합하여 SELECT 문에 표시된 최종 결과를 얻습니다(라인 25).
앵커가 반복되지 않는 이유:
앵커 표현식은 재귀의 초기 시작점을 정의합니다. 각 반복에서 실행되지만 결과 집합을 확장하는 재귀 표현식과 다릅니다. 따라서 앵커 레코드는 한 번만 포함됩니다.
위 내용은 재귀 CTE는 어떻게 한 줄씩 실행합니까: 단계별 설명?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!