2017-03-24 15 views
0

私は1つの面倒な問題に直面しています。結合内の階層的クエリ

これは状況です。

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はselect内では表示されません。私は

START WITH th.parent_id is null 

の条件でスタートを変更した場合は

間違ったままです。 誰かがこの状況を解決する方法を知っていますか?

+0

期待される出力をどうしたらよいでしょうか? – OldProgrammer

+0

「これは私がやりたいことです」そしてその後、あなたがしたいことをしないコードを表示します(これが最初にこれを投稿している理由です)。だから、あなたがしたいことをどのように推測するのですか?それ以外は何もしないコードからですか? OldProgrammerが上に書いたものを見てください。 – mathguy

答えて

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