Oracle双向层次查询

3
我有一个关于Oracle分层查询的问题。
假设我有一个单位关系表,其中unit1是父级,unit2是子级。
ID UNIT1 UNIT2 OTHER COLUMNS
------大量数据--------
假设我正在查看一个单位,现在我想要关于它与其他单位之间关系的完整图/树。
很容易只获取相互连接的父级和子级:
 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 步时,它不会搜索该单元的子单元,而只会继续搜索父级。因此,如果父单元有另一个子单元(不是我们正在寻找的那个),我将无法到达它,因为语法只会继续查找父级。之后,它只会寻找子级,而不是这两个的结合体。
有没有办法可以针对每个子或父单元同时搜索父级和子级?

样本数据和期望输出,可以提供吗? - Tebbe
让我们简化一下...想象一下人类。假设我有两个孩子。我有两个父母(妈妈和爸爸),他们也有两个孩子(我和我的儿子)。现在我正在寻找自己,并想要按层次获取所有亲戚,使用CONNECT BY一旦我得到了我的父母,再使用连接单元ID1和单元ID2切换,我就可以得到我的两个孩子。但是我没有得到我的兄弟姐妹。当我使用CONNECT BY获取我的父母时,它只会获取我的父母、他们的父母等等。我希望查询还能检查我的父母的孩子。 - Margus Sellin
你有使用过 Oracle 的 CONNECT_BY_ROOT 吗? - Tebbe
不是很清楚,这会有帮助吗?如果我在树的中间呢?我确实在Oracle的文档中看到了这个选项,但是觉得可能没什么用。 - Margus Sellin
1个回答

1

我不确定你能否用单个查询完成。但是你可以轻松地分两步完成:

  1. 找到你的单位的更老的祖先A(那个没有父母的)
  2. 找到A的所有子代

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接