使用PostgreSQL递归CTE获取多对多关系下指定父节点的家族树
PostgreSQL递归CTE查询家族树示例
现有Parents表存储家族成员信息,Parents_rel表记录父子关联关系(支持多对多及层级嵌套),以下是用递归CTE查询指定父节点(ID=1的Bob)完整家族树的PostgreSQL语法示例:
数据表结构
Parents表
| id | name |
|---|---|
| 1 | bob |
| 2 | rick |
| 3 | ann |
| 4 | charles |
| 5 | carlos |
| 6 | maria |
Parents_rel表
| Parent_id | Child_id |
|---|---|
| 1 | 2 |
| 1 | 3 |
| 2 | 4 |
| 5 | 6 |
递归查询SQL代码
WITH RECURSIVE family_tree AS ( -- 递归起点:选取目标父节点Bob(ID=1) SELECT id, name FROM Parents WHERE id = 1 UNION ALL -- 递归遍历:关联获取所有层级的子节点 SELECT p.id, p.name FROM Parents p INNER JOIN Parents_rel pr ON p.id = pr.Child_id INNER JOIN family_tree ft ON pr.Parent_id = ft.id ) SELECT id, name FROM family_tree ORDER BY id;
预期输出
| id | name |
|---|---|
| 1 | bob |
| 2 | rick |
| 3 | ann |
| 4 | charles |
内容的提问来源于stack exchange,提问作者zango123
相关产品推荐
相关产品推荐

