2016-12-05 11 views
0

"Source"と "Target"という2つの列を含む1つのテーブルを作成しました。私はここでテーブルの依存関係で一意の階層を取得する方法

+--------+--------+ 
| Source | target | 
+--------+--------+ 
| A  | E  | 
+--------+--------+ 
| B  | D  | 
+--------+--------+ 
| C  | F  | 
+--------+--------+ 
| D  | C  | 
+--------+--------+ 
| E  | F  | 
+--------+--------+ 
| F  | H  | 
+--------+--------+ 
| E  | I  | 
+--------+--------+ 
| H  | I  | 
+--------+--------+ 
| E  | H  | 
+--------+--------+ 
| I  |  | 
+--------+--------+ 

Eのようないくつかの他の値をソースとして、対象行為でいくつかの値は、ターゲットがAのためである場合があり、EもF、H & I.などのソースです...
OUTPUTは..(最高レベル値と異なる固有パス)

B->D->C->F->H->I 
A->E->F->H->I 
A->E->H->I 
A->E->I 

craeteテーブル

create table table1 (source varchar2(40),target varchar2(40)); 
なければなりません

insertコマンドは次のとおりです。(適切な結果を与えていません)

insert into table1 values ('A','E'); 
insert into table1 values ('B','D'); 
insert into table1 values ('C','F'); 
insert into table1 values ('D','C'); 
insert into table1 values ('E','F'); 
insert into table1 values ('F','H'); 
insert into table1 values ('E','I'); 
insert into table1 values ('H','I'); 
insert into table1 values ('E','H'); 
insert into table1 (SOURCE) values ('I');  

マイ実行されたクエリは

select path from (select CONNECT_BY_ISLEAF leaf, 
SYS_CONNECT_BY_PATH(source,'->') path from table1 where leaf=1; 

であるSQLやPLSQLを使用してソリューションを提供してください。

+0

..あなたに感謝し、あなたが今確認することができ – Abhi

答えて

1
select   CONNECT_BY_ROOT source || SYS_CONNECT_BY_PATH(target,'->') as path 

from   table1 t 

where   connect_by_isleaf = 1   

connect by  source = prior target  
      and target is not null 

start with  source in 
       (
        select source from table1 
        minus 
        select target from table1 
       ) 
;    

+------------------+ 
| PATH    | 
+------------------+ 
| A->E->F->H->I | 
+------------------+ 
| A->E->H->I  | 
+------------------+ 
| A->E->I   | 
+------------------+ 
| B->D->C->F->H->I | 
+------------------+ 
+0

ドゥドゥMarkovitzを...ありがとうございました。 –

関連する問題