> 데이터 베이스 > MySQL 튜토리얼 > 재귀 CTE는 어떻게 한 줄씩 실행합니까: 단계별 설명?

재귀 CTE는 어떻게 한 줄씩 실행합니까: 단계별 설명?

Patricia Arquette
풀어 주다: 2024-12-31 11:03:13
원래의
448명이 탐색했습니다.

How Do Recursive CTEs Execute Line by Line: A Step-by-Step Explanation?

한 줄씩 재귀 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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