ホームページ > データベース > mysql チュートリアル > SQL Server で再帰的 CTE はどのように行ごとに実行されるのでしょうか?

SQL Server で再帰的 CTE はどのように行ごとに実行されるのでしょうか?

Mary-Kate Olsen
リリース: 2024-12-30 09:52:10
オリジナル
345 人が閲覧しました

How Does a Recursive CTE Execute Line by Line in SQL Server?

再帰 CTE の行ごとの実行

再帰共通テーブル式 (CTE) は理解するのが難しいことがよくありますが、理解することはできます。実行ラインを次のように分解することで理解できます。 line.

アンカー

SELECT  id, Name, ParentID, CAST(Name AS VARCHAR(1000)) AS Path
FROM    @tbl
WHERE   ParentId IS NULL
ログイン後にコピー
  • アンカーは、ParentId が NULL である最上位ノードを選択します。
  • それは、次の列: id、Name、ParentID、およびノー​​ドの値で初期化された Path 列name.

再帰メンバー

SELECT  t.id, t.Name, t.ParentID, CAST((a.path + '/' + t.Name) AS VARCHAR(1000)) AS "Path"
FROM    @tbl AS t
JOIN    abcd AS a
ON      t.ParentId = a.id
ログイン後にコピー
  • 再帰メンバーは、ParentId に基づいて一時テーブル abcd を @tbl と結合することによって子ノードを選択します。
  • 子ノードの名前を親ノードの名前に追加します。パス。

無限の UNION ALL

再帰的 CTE は、反復ごとに新しいレベルの階層を追加し、水平方向に拡張する無限の UNION ALL として考えてください。たとえば、abcd2 には abcd1 の子ノードが含まれ、abcd3 には abcd2 の子ノードが含まれる、というようになります。

各反復

  • アンカーは決して存在しません。後の反復ではスキップされます。常に最上位のノードが選択されます。
  • 再帰メンバーは、前に選択したノードに子ノードを結合し、階層構造を作成します。
  • 各反復が進むにつれて、Path 列が更新されて反映されます。正しい親子関係。

停止中条件

理論的には、再帰的 CTE は無限に実行できます。ただし、SQL Server は停止条件を実装することで無限のレコードセットを防止します。再帰メンバーが新しい行の生成に失敗すると、反復は停止します。

この例では、再帰メンバーがレベル abcd6 の子ノードを見つけることができなかった場合、反復は終了します。

最終結果

最終結果は、最上位のノードから最下位のレベルまで展開します。 [パス] 列には、階層内の各ノードへの完全なパスが表示されます。

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

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