2016-12-05 83 views
0

我創建了一個表,其中包含兩列「源」和「目標」。我有案件中,有些像如何獲得表依賴關係的唯一層次結構

+--------+--------+ 
| 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.等等...
輸出應..(最高等級值不同的獨特路徑)

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

表瞭解創建

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

謝謝嘟嘟Markovitz ... – 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

現在可以檢查。 –

相關問題