【发布时间】:2020-05-15 22:13:06
【问题描述】:
我想要一个递归视图,它报告给定组的所有孩子,每行一个。
我已经尝试了 postgres 文档中的基本示例,并进行了修改以尝试在每个递归步骤中返回多行,但我一直以无限循环结束。
样本数据
create table groups (
group_id varchar,
parent_id varchar
);
insert into groups (group_id, parent_id) values
('A',NULL),
('B','A'),
('C','B'),
('D','C'),
('E','A')
;
-- A
-- / \
-- E B
-- \
-- C
-- \
-- D
select * from groups;
group_id |parent_id
---------|----------
A |[NULL]
B |A
C |B
D |C
E |A
我想要一个递归视图,它报告给定组的每个孩子,每行一个。
预期输出
垂直空白只是为了清晰。
select * from group_recursive;
group_id | parent_id | all_children_ids
---------|-----------|-----------------
A | NULL | A
B | A | B
B | A | A
E | A | E
E | A | A
C | B | C
C | B | B
C | B | A
D | C | D
D | C | C
D | C | B
D | C | A
select * from group_recursive where all_children_ids = 'A';
A | NULL | A
B | A | A
E | A | A
C | B | A
D | C | A
select * from group_recursive where all_children_ids = 'B';
B | A | B
C | B | B
D | C | B
select * from group_recursive where all_children_ids = 'D';
D | C | D
我不得不假设这是一个可能的视图,但如果有必要我可以更改为定义一个函数或其他东西。
感谢任何帮助,谢谢!
【问题讨论】:
标签: sql postgresql select common-table-expression recursive-query