再帰クエリ 【recursive query】 再帰SQL
WITH RECURSIVE句とUNION ALL句を組み合わせ、「WITH RECURSIVE 一時テーブル AS (非再帰項 UNION ALL 再帰項)」のように記述する。一時テーブルは再帰クエリの処理途上の状態や結果を格納するテーブルの名前、非再帰項は最初に一度だけ実行されるSELECT文、再帰項は再帰的に繰り返し実行されるSELECT文である。
再帰クエリが実行されると、まず非再帰項が実行され、結果を一時テーブルに格納する。次に一時テーブルを対象に再帰項が実行され、結果が一時テーブルに格納される。一時テーブルが空になるまで「再帰項の実行→一時テーブルへ上書き格納」を繰り返す。非再帰項と再帰項の各回の抽出結果はUNION ALLで順番に連結され、最後に一時テーブルにまとめて格納される。
再帰クエリの仕組みおよびWITH RECURSIVE句はSQLの標準規格にも採用されており、Oracle Database、SQL Server、IBM Db2、MySQL、MariaDB、PostgreSQLなど主要なRDBMSのほとんどが対応している。
(2023.7.6更新)