小编典典

使用oracle connect by查找邻接表模型中的所有节点

sql

给定以下模型:

create table child_parent (
  child number(3),
  parent number(3)
);

给定以下数据:

insert into child_parent values(2,1);
insert into child_parent values(3,1);
insert into child_parent values(4,2);
insert into child_parent values(5,2);
insert into child_parent values(6,3);

产生以下树:

        1
       / \
      2   3
     / \   \
    4   5   6

现在我可以找到5个这样的父母:

SELECT parent FROM child_parent START WITH  child = 5 
              CONNECT BY NOCYCLE PRIOR parent = child;

但是如何从5开始获取所有节点(1,2,3,4,5,6)?


阅读 215

收藏
2021-04-19

共1个答案

小编典典

Oracle的CONNECT BY语法旨在遍历分层数据:它是单向的,因此不适合表示需要双向性的图。无法2 -> 1 -> 3进行一个查询,这是使所有节点从5开始的工作。


很久以前,我回答了一个关于在层次结构中展平节点的问题(即传递闭包),即如果1->2->3为true,则“ 1->
3”也为true。它链接到一篇论文,该论文演示了PL /
SQL解决方案以生成所有边缘并将它们存储在表中。在这种情况下,可以使用类似的解决方案。但是很明显,只有图中的节点不经常更改才是可行的。因此,也许只有有限的用途。

2021-04-19