Menu
Coddy logo textTech

階層をたどる

CoddyのSQLジャーニー「応用」セクションの一部。レッスン 21/27。

再帰的 CTE が存在する本当の理由は、1 つのテーブルに格納された parent/child 関係をたどることです。employees に、同じテーブルを指し返す manager_id 列があるとします。

WITH RECURSIVE chain AS (
    SELECT id, name, manager_id
    FROM employees WHERE id = 7              -- アンカー: 開始の従業員
    UNION ALL
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    JOIN chain c ON e.id = c.manager_id      -- 再帰: マネージャーへジャンプ
)
SELECT * FROM chain

各ステップでは、CTEをemployeesに再度結合し、ツリーを1レベル上へ移動します。行にmanagerがない場合(JOINが何にも一致しない場合)、再帰は自然に停止します。

challenge icon

チャレンジ

中級

利用可能なテーブルと列:

  • categoriesidnameparent_id

各カテゴリには、別のカテゴリを指すオプションの parent_id があります。カテゴリ id = 1 の子孫(子、孫、…)であるすべてのカテゴリを返しますが、カテゴリ 1 自体は除外しますidname を返し、id の順に並べます。

自分で試してみよう

WITH RECURSIVE descendants AS (
    -- anchor: id 1 の直接の子
    -- recursive: それらの子など
)
SELECT id, name FROM descendants ORDER BY id
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

応用のすべてのレッスン

自分で練習してみよう: SQLプレイグラウンド