WITH RECURSIVE
WITHとは
CTE(Common Table Expression)の略で、SQL文の中で一時的なテーブルを作ることができる。
WITH cte_name AS (
SELECT ...
)
SELECT * FROM cte_name;
WITH RECURSIVEとは
WITHの中で再帰的なクエリを実行することができる。
-- ECサイトのカテゴリーと商品のネスト関係のクエリを取得
-- parent_id = 1のカテゴリーを取得し、その子カテゴリーを再帰的に取得する
WITH RECURSIVE category_group AS (
SELECT id, name, parent_id
FROM categories
WHERE parent_id = 1 -- 親カテゴリーを取得
UNION ALL
SELECT c.id, c.name, c.parent_id
FROM categories c
INNER JOIN category_group cg ON c.parent_id = cg.id -- 子カテゴリーを取得
)
select * from category_group;
あんまり使う機会はないかもしれないが、再帰的なクエリを実行することができるので、ツリー構造のデータを扱うときに便利。