問題一覧に戻る
上級高度な演算子
問題70: 再帰CTE - 階層データ処理
再帰的な共通テーブル式を使用して階層構造データを処理する方法を学習します。組織図、カテゴリツリー、部品表など、親子関係を持つデータの探索に使用されます。
-- 従業員階層を再帰的に取得
WITH subordinates AS (
-- アンカーメンバー:トップレベル
SELECT employee_id, name, manager_id, 0 as level
FROM employees
WHERE manager_id IS NULL
-- アンカーとリカーシブを結合
-- リカーシブメンバー:部下を再帰的に取得
SELECT e.employee_id, e.name, e.manager_id, s.level + 1
FROM employees e
JOIN subordinates s ON e.manager_id = s.employee_id
)
-- 階層順に表示
SELECT * FROM subordinates ORDER BY level;