ホームページ > データベース > mysql チュートリアル > 再帰的 CTE は行ごとにどのように実行されるか: 段階的な説明?

再帰的 CTE は行ごとにどのように実行されるか: 段階的な説明?

Patricia Arquette
リリース: 2024-12-31 11:03:13
オリジナル
450 人が閲覧しました

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.

行 20-22: 再帰式は、子レコードを選択し、その名前を [パス] 列の親のパスと連結することによって CTE を拡張します。

25 行目: CTE abcd から選択して最終値を取得しますresult.

実行手順:

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).

アンカーが繰り返されない理由:

アンカー式は再帰の最初の開始点を定義します。これは各反復で実行されますが、結果セットを拡張する再帰式とは異なります。したがって、アンカー レコードは 1 回だけ含まれます。

以上が再帰的 CTE は行ごとにどのように実行されるか: 段階的な説明?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート