階層構造のテーブル
下記のAテーブルはIDをキーにした階層構造のレコード構成を持つテーブルになっている。
Aテーブルの階層構造を分かりやすく表したのが下記の図
この図を見れば分かる通り、社長 > 副社長 > 部長 > 課長 > 社員
とレコードが階層構造になっている。
再帰SQL
Eを主体とした上位のレコードを取得する方法
WITH RECURSIVE Parent AS (
SELECT ID, 値, 親ID
FROM Aテーブル
WHERE ID = 'E'
UNION ALL
SELECT Aテーブル.ID, Aテーブル.値, Aテーブル.親ID
FROM Aテーブル
JOIN Parent ON Aテーブル.ID = Parent.親ID
)
SELECT ID, 値, 親ID
FROM Parent;
実行結果
| ID | 値 | 親ID |
|----|--------|-------|
| E | 社員 | D |
| D | 課長 | C |
| C | 部長 | B |
| B | 副社長 | A |
| A | 社長 | NULL |
Aを主体とした下位のレコードを取得する方法
WITH RECURSIVE Child AS (
SELECT ID, 値, 親ID
FROM Aテーブル
WHERE ID = 'A'
UNION ALL
SELECT Aテーブル.ID, Aテーブル.値, Aテーブル.親ID
FROM Aテーブル
JOIN Child ON Aテーブル.親ID = Child.ID
)
SELECT ID, 値, 親ID
FROM Child;
実行結果
| ID | 値 | 親ID |
|----|--------|-------|
| A | 社長 | NULL |
| B | 副社長 | A |
| C | 部長 | B |
| D | 課長 | C |
| E | 社員 | D |