MySQL 再帰的CTE(共通表式)
MySQL の再帰的 CTE(コモンテーブル式)とは、再帰的なクエリを扱う方法です。CTE により、クエリ内で一時テーブルを作成し、クエリ内でその一時テーブルを参照できます。
従業員テーブルに、従業員の ID、氏名、上司 ID があり、特定の従業員とその下属全員(直接的および間接的)を検索する場合、MySQL では再帰的 CTE を用いたクエリで実現できます。
まず、UNION ALL 演算子を使用して初期クエリと再帰クエリを結合する再帰的 CTE を作成する必要があります。初期クエリは特定の従業員の直属の部下を検索し、再帰クエリは特定の従業員の部下の部下を検索します。さらにこれを繰り返します。
サンプルクエリは次のとおりです。
再帰的共通テーブル式(CTE)EmployeeHierarchy with
ID、氏名、上司IDを選択する
社員より
ID = 1 の場合
ユニオンオール
e.ID, e.Name, e.ManagerID を SELECT
従業員eから
INNER JOIN EmployeeHierarchy AS eh ON e.ManagerID = eh.ID
彼女から別れを告げられて、彼は自宅に引きこもってしまった。
全て選択
EmployeeHierarchy から
上司のIDが1の社員の部下をすべて検索したい場合、上のクエリでは、初期クエリでID1の社員情報を抽出して結果セットに追加しています。 そして、再帰的に続くクエリでは、その社員の部下を検索して、結果セットに追加します。このプロセスは部下がなくなるまで続きます。
最後に、最終的なクエリ結果で、再帰的CTE名のエイリアスを指定し、結果セット内のすべての行を選択します。
なお、MySQL で再帰的 CTE を使用するには、再帰クエリを定義するために WITH RECURSIVE キーワードを使用する必要があります。また、再帰クエリには、初期クエリと再帰クエリが含まれる必要があり、再帰クエリで再帰的 CTE それ自体を参照する必要があります。
再帰的CTEは、MySQLにおいて再帰処理を行う際に非常に強力なツールです。複雑な再帰処理であっても、構造化された簡単な構文で記述が可能となり、処理を簡略化します。