Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql oracle双向分层查询_Sql_Database_Oracle - Fatal编程技术网

Sql oracle双向分层查询

Sql oracle双向分层查询,sql,database,oracle,Sql,Database,Oracle,我有一个关于oracle分层查询的问题 假设我有一个相互关联的单元的关系表,其中unit1是父单元,unit2是子单元 ID UNIT1 UNIT2其他列 ------大量数据-------- 假设我看到的是一个单元,现在我需要一个完整的图形/树来描述它与其他单元的关系 很容易得到相互连接的父母和孩子: INSERT INTO search_table SELECT id FROM mytable START WITH unit_id1 = 12 (or any random

我有一个关于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步时,它不会搜索该单位的子单位,而是只会继续搜索父单位。所以基本上,如果父单元有另一个子单元(不是我们正在寻找的那个),我将无法找到它,因为语法一直只寻找父单元。后来,它只寻找儿童,而不是这两者的结合


是否有一种方法可以为每个子单元或父单元同时搜索父单元和子单元?

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

  • 找到你所在单位的老祖先A(没有父母的人)
  • 找到一个家庭的所有孩子

  • 样本数据+所需的输出,请?让我们更容易…imaggine humans。假设我有两个孩子。我有两个父母(妈妈和爸爸),他们有两个孩子(我和我的儿子。现在我在看我自己,想按等级获得我所有的亲戚,也就是说……一旦我得到我的父母,就使用connect by unit_id1和unit_id2,我得到了我的两个孩子。但我没有得到我的兄弟/姐妹。当我使用connect by获得我的父母时,它只会得到我的父母,他们的父母等。我想要查询还检查我的父母的孩子。你玩过Oracle的代码> CelpTyByBooth吗?不是吗?这有帮助吗?如果我在树的中间,我确实看到了Oracle文档中的选项,但没想到这会有帮助。