再帰的 CTE 実行の内訳
再帰的 CTE は段階的な実行プロセスに従い、最終的に目的の結果セットを生成します。理解を深めるために、各ステップを 1 行ずつ詳しく見てみましょう。
WITH abcd AS (
この行は、「abcd」という名前の再帰 CTE を宣言します。これは、結果を蓄積する一時テーブル。
--アンカー
最初の select ステートメントはアンカーとして機能し、アンカー条件を満たす行を選択します。この場合、" の初期設定が行われます。 abcd" CTE.
SELECT id、Name、ParentID、CAST(Name AS VARCHAR(1000)) AS Path
この行は、ID、Name、ParentID、および最初は行の Name のみを含む計算列「Path」を抽出します。
FROM @tbl
データは一時テーブルから取得されます@tbl.
WHERE ParentId IS NULL
この条件は、ParentID が null である行をフィルターし、効果的に最上位の行を選択します。
UNION ALL
この演算子は、再帰メンバーを含むアンカー select ステートメント。
--recursive member
2 番目の select ステートメントは、アンカーに基づいて反復を実行する再帰メンバーを形成します。
SELECT t.id、t.Name、t.ParentID、CAST((a.path '/' t.Name) AS VARCHAR(1000)) AS "Path"
この行は、ID、Name、ParentID、および親の "Path" を連結する変更された列 "Path" を取得します。現在の行の名前。
FROM @tbl AS t
データは、「t」というエイリアスを持つ一時テーブル @tbl から取得されます。
JOIN abcd AS a
この結合ParentID を使用して、「t」の行を既存の「abcd」CTE の行とリンクします。 column.
ON t.ParentId = a.id
結合条件により、子行が親行と一致することが保証されます。
SELECT * FROM abcd
最後に、このステートメントはすべての反復を含む、再帰的 CTE からの完全な結果セット。
以上が再帰的 CTE は段階的にどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。