【发布时间】:2019-11-27 14:08:18
【问题描述】:
我们有如下父子关系。
生成表格的脚本如下。
create table dependency ( packageid int, dependant_packageid int);
insert into dependency values (2,1);
insert into dependency values (3,1);
insert into dependency values (4,1);
insert into dependency values (5,2);
insert into dependency values (6,3);
insert into dependency values (7,4);
insert into dependency values (7,5);
insert into dependency values (8,5);
insert into dependency values (8,3);
insert into dependency values (4,5);
insert into dependency values (6,4);
insert into dependency values (5,3);
我们想根据下面提到的查询获取数据。
- 为给定的包获取可能的依赖层次结构
Ex:
packageid : 6
Result should be: [(3,1),(4,1),(4,5,2,1),(4,5,3,1)]
packageid : 7
Result should be: [(4,1),(4,5,2,1),(4,5,3,1)]
packageid : 8
Result should be: [(5,2,1),(5,3,1),(3,1)]
- 为给定包获取父包列表
Ex:
1 - 2,3,4
2 - 5
3 - 6,8,5
4 - 7,6
5 - 7,8,4
- 如果我们需要维护这种父子关系(多对多),理想的模式结构应该是什么(牢记性能)?
感谢任何帮助....愉快的编码....:)
【问题讨论】:
-
您的架构适合这个。您在这里需要的称为递归 CTE。这是一个 CTE 内的两部分查询,它迭代地连接回自身,直到连接失败。
-
仅供参考,这是older SO post about alternatives for an adjacency list,您可能会感兴趣。
标签: sql postgresql performance parent-child hierarchical-data