oracle 双向分层查询

Posted

技术标签:

【中文标题】oracle 双向分层查询【英文标题】:oracle two-way hierarchical query 【发布时间】:2012-08-01 14:00:31 【问题描述】:

我有一个关于 oracle 分层查询的问题。

假设我有相互关联的单元的关系表,其中 unit1 是父单元,unit2 是子单元。

ID UNIT1 UNIT2 其他列

--------大量数据--------

假设我正在查看一个单元,现在我想要关于它与其他单元的关系的完整图表/树。

很容易得到相互连接的父母和孩子:

 INSERT INTO search_table
 SELECT id
   FROM  mytable
  START  WITH unit_id1 = 12 (or any random unit id)
CONNECT BY nocycle PRIOR unit_id2 = unit_id1
  GROUP BY id;

这是向上移动,类似的是向下移动。现在发生的情况是,例如,当向上移动 1 步时,它不会搜索该单元的子单元,而只会继续搜索父单元。所以基本上我如果父单位有另一个孩子(不是我们正在寻找的那个)我将无法到达它,因为语法一直只寻找父母。后来它只寻找孩子,而不是这两者的结合。

有没有一种方法可以为每个孩子或父母单位搜索父母和孩子?

【问题讨论】:

请提供样本数据+所需的输出? 让我们更轻松...想象一下人类。假设我有 2 个孩子。我有两个父母(妈妈和爸爸),他们有 2 个孩子(我和我的儿子。现在我正在寻找自己,并且想要分层地获取我所有的亲戚,可以这么说......一旦我得到我的父母并使用 connect 就使用 connect通过 unit_id1 和 unit_id2 切换,我得到了我的 2 个孩子。但我没有得到我的兄弟/姐妹。当我使用 CONNECT by 得到我的父母时,它只会得到我的父母,他们的父母等。我想要查询也检查我父母的孩子. 你玩过Oracle的CONNECT_BY_ROOT吗? 不是真的,这有帮助吗?如果我在树中间?我确实在 oracle 的文档中看到了该选项,但认为这没有帮助。 【参考方案1】:

我不确定您是否可以通过单个查询来完成。 但是您可以分两步轻松完成:

    找到你单位的老祖先A(没有父母的那个) 找到A的所有孩子

【讨论】:

以上是关于oracle 双向分层查询的主要内容,如果未能解决你的问题,请参考以下文章

具有多个父级的 Oracle 分层查询

Oracle 分层查询

oracle ebs r12报告的Oracle flex值层次结构SQL查询

如何使用分层子查询构建层次结构路径

有没办法在postgreSQL中查询oracle上的数据

使用索引进行 Oracle Sql 调优