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 双向分层查询的主要内容,如果未能解决你的问题,请参考以下文章