再帰的 CTE の実行方法 (行ごと)
再帰的 CTE (一般に階層クエリと呼ばれます) は、情報を走査して抽出するために使用されます。ツリー状のデータ構造から。これらのクエリがどのように実行されるかを理解するのは難しい場合があります。
再帰的 CTE は、次のような一連のネストされた UNION ALL 操作として動作します。
WITH abcd1 AS ( SELECT * FROM @tbl WHERE ParentID IS NULL ) UNION ALL WITH abcd2 AS ( SELECT t.* FROM abcd1 JOIN @tbl t ON t.ParentID = abcd1.id ) UNION ALL WITH abcd3 AS ( SELECT t.* FROM abcd2 JOIN @tbl t ON t.ParentID = abcd2.id ) ...
再帰的メンバー ブロックの各反復により、前の反復をベーステーブルと結合することにより、新しい結果セットが作成されます。このプロセスは、行が返されないことで判断される停止条件が満たされるまで続行されます。
この例では、
Anchor (SELECT ... ):
再帰メンバー (SELECT ...):
パス計算:
反復 (UNION ALL):
選択 (SELECT * FROM abcd):
アンカーは後続の反復でスキップされないことに注意することが重要です。代わりに、これは各再帰メンバーが階層を探索するための開始点として機能します。最終結果の重複を防ぐために、一意の識別子 (パス) を使用して、階層内の異なるレベルに存在する同じ名前のレコードを区別します。
以上が再帰的 CTE は、ネストされた UNION ALL 操作を段階的にどのように実行しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。