再帰SQL で要素の連結、どいうことかというと、
テーブル名:division
id | parent_id | name |
1 | null | A |
2 | 1 | B |
3 | 2 | C |
4 | 2 | D |
というテーブルが存在した時、再帰SQLを走らせて、
”A”
"A,B"
"A,B,C"
"A,B,D"
のように各々のレコードに対して親→子の name列の連結=つまりPATH に相当するもの
を抽出したい。
WITH RECURSIVE r(id, parent_id, depth, chain_name, name) AS ( SELECT id, parent_id, 0, name AS chain_name, name FROM division WHERE id = 1 UNION ALL SELECT d.id, d.parent_id, r.depth+1, concat(r.chain_name,',',d.name), d.name FROM division d, r WHERE d.parent_id = r.id ) SELECT r.id, r.parent_id, r.depth, r.chain_name, r.name FROM r