0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【再帰SQL】階層構造のレコードから上位、下位のレコードの取得方法

Last updated at Posted at 2023-08-30

階層構造のテーブル

下記のAテーブルはIDをキーにした階層構造のレコード構成を持つテーブルになっている。
image.png
Aテーブルの階層構造を分かりやすく表したのが下記の図
image.png
この図を見れば分かる通り、社長 > 副社長 > 部長 > 課長 > 社員とレコードが階層構造になっている。

再帰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     |
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?