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

再帰的 CTE はどのように段階的に実行されるのでしょうか?

Patricia Arquette
リリース: 2025-01-01 09:31:09
オリジナル
350 人が閲覧しました

How Does a Recursive CTE Execute Step-by-Step?

再帰的 CTE は行ごとにどのように実行されますか?

再帰的 CTE は、無限の UNION ALL と同様に、基本ケースと複数のケースで構成されます。再帰呼び出し。次の点を考慮してください:

WITH    rows AS
        (
        SELECT  *
        FROM    mytable
        WHERE   anchor_condition
        ),
        rows2 AS
        (
        SELECT  *
        FROM    set_operation(mytable, rows)
        ),
        rows3 AS
        (
        SELECT  *
        FROM    set_operation(mytable, rows2)
        ),
        …
SELECT  *
FROM    rows
UNION ALL
SELECT  *
FROM    rows2
UNION ALL
SELECT  *
FROM    rows3
UNION ALL
…
ログイン後にコピー

提供された例では:

WITH    abcd1 AS
        ( 
        SELECT  *
        FROM    @tbl t
        WHERE   ParentId IS NULL 
        ),
        abcd2 AS
        ( 
        SELECT  t.*
        FROM    abcd1
        JOIN    @tbl t
        ON      t.ParentID = abcd1.id
        ),
        abcd3 AS
        ( 
        SELECT  t.*
        FROM    abcd2
        JOIN    @tbl t
        ON      t.ParentID = abcd2.id
        ),
        abcd4 AS
        ( 
        SELECT  t.*
        FROM    abcd3
        JOIN    @tbl t
        ON      t.ParentID = abcd3.id
        ),
        abcd5 AS
        ( 
        SELECT  t.*
        FROM    abcd4
        JOIN    @tbl t
        ON      t.ParentID = abcd4.id
        ),
        abcd6 AS
        ( 
        SELECT  t.*
        FROM    abcd5
        JOIN    @tbl t
        ON      t.ParentID = abcd5.id
        )
SELECT  *
FROM    abcd1
UNION ALL
SELECT  *
FROM    abcd2
UNION ALL
SELECT  *
FROM    abcd3
UNION ALL
SELECT  *
FROM    abcd4
UNION ALL
SELECT  *
FROM    abcd5
UNION ALL
SELECT  *
FROM    abcd6
ログイン後にコピー

各アンカーの反復により新しい再帰呼び出しが生成され、ネストされたレイヤーのセットが作成されます。アンカーは 1 回呼び出され、開始点として機能します。後続の反復では、前の呼び出しの結果を使用して再帰メンバーを設定します。

abcd6 は結果を返さないため、停止条件を意味します。理論的には、再帰的 CTE は無限になる可能性がありますが、SQL Server ではレコードセットが無限にならないように制限を適用しています。

詳細については、次の記事を参照してください。

  • [SQL Server: は再帰的です。 CTEは本当にセットベース?](https://www.sqlshack.com/sql-server-recursive-ctes-really-set-based/)

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

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