今日学んだこと:再帰SQLに関して

2025年9月2日

概要

今日は再帰SQLについて学んだ。

ポイント1

  • 再帰SQLは、自分自身を参照するクエリのこと。階層構造のデータ(組織図、カテゴリ、コメントの返信など)を効率的に処理するために使用する。

  • メインクエリの中で同じサブクエリを何度も呼び出している場合に使われるのがwith句。with句を使うとサブクエリに名前をつけることができるので、メインクエリから何度でも呼び出すことができる。

ポイント2

Step 1: ベースケース(開始点を決める) 「どこから始めるか?」を決める段階 ベースケースは再帰の出発点。階層の一番上や特定の条件から始める。

ベースケース設計のコツ

階層の頂点を見つける(parent_id が NULL など) 特定の条件から開始(特定のユーザーID、カテゴリIDなど) 初期値を設定(level = 0, depth = 0など)

Step 2: 再帰ケース(次を見つける) 「ベースケースの結果を使って、次は何を取得するか?」を決める段階 再帰ケースは前回の結果を使って次のデータを取得する。

Step 3: 結合条件(つながりを定義) 「前回の結果と今回のデータをどうつなげるか?」を決める段階

実装例・コード例

WITH RECURSIVE クエリ名 AS (
    -- ベースケース(開始点)
    SELECT 初期データ
    
    UNION ALL
    
    -- 再帰ケース(自分自身を参照)
    SELECT 次のデータ
    FROM テーブル
    JOIN クエリ名 ON 条件  -- ここで自分自身を参照
)
SELECT * FROM クエリ名;

参考文献・リンク

https://qiita.com/Shoyu_N/items/f1786f99545fa5053b75