Join中的分层查询

时间:2017-03-24 20:30:27

标签: oracle hierarchical

我面对一个烦人的问题,我想要一些帮助。

就是这种情况。

CREATE TABLE tree_hierarchy (
  id        NUMBER (20)
 ,parent_id NUMBER (20)
);
CREATE TABLE tree_information (
  id        NUMBER (20)
 ,some_text VARCHAR(20)
 ,tree_id NUMBER (20)
);
INSERT INTO tree_hierarchy (id, parent_id) VALUES (2, null);
INSERT INTO tree_hierarchy (id, parent_id) VALUES (4, 2);
INSERT INTO tree_hierarchy (id, parent_id) VALUES (9, 4);
INSERT INTO tree_hierarchy (id, parent_id) VALUES (20, null);
INSERT INTO tree_hierarchy (id, parent_id) VALUES (40, 20);
INSERT INTO tree_hierarchy (id, parent_id) VALUES (90, 40);
INSERT INTO tree_information (id, some_text, tree_id) VALUES (10,'Some teste', 2);
INSERT INTO tree_information (id, some_text, tree_id) VALUES (11,'Other tree', 20);

我想做这样的事情。

SELECT hier.*
  FROM tree_information Ti
  JOIN (
        SELECT 
            id,
            parent_id
         FROM tree_hierarchy th
         where connect_by_isleaf = 1
        START WITH th.id = ti.tree_id
        CONNECT BY PRIOR th.id = th.parent_id


  ) hier on 1=1;

但是在选择内部看不到ti.tree_id。

如果我用

的条件更改开头
 START WITH th.parent_id is null

会保持错误。 有人知道如何解决这种情况吗?

1 个答案:

答案 0 :(得分:0)

如果您明确提供预期结果,我将不胜感激。 我最好的猜测是:

SELECT hier.*, ti.*
  FROM tree_information Ti
  JOIN (
        SELECT 
            id,
            parent_id,
            connect_by_root th.id as tree_id
         FROM tree_hierarchy th
         where connect_by_isleaf = 1
        START WITH th.id in ( select tii.tree_id from tree_information Tii)
        CONNECT BY PRIOR th.id = th.parent_id
  ) hier on ti.tree_id = hier.tree_id;

ID  PARENT_ID   TREE_ID ID  SOME_TEXT   TREE_ID
 9          4         2 10  Some teste        2
90         40        20 11  Other tree       20