2015-10-24 71 views
2

我有一個樹數據,我試圖只選擇根父母。數據可能是更大集合的子集,因此父代可能不是空的。我想爲數據集中的每個樹最高級別。Oracle hierchial查詢選擇僅父根

with test_data as (
select '1' ID,'100' name, null parent from dual 
union 
select '2' ID,'200' name, null parent from dual 
union 
select '3' ID,'300' name, null parent from dual 
union 
select '1.1' ID,'1.100' name, '1' parent from dual 
union 
select '2.1' ID,'2.100' name, '2' parent from dual 
union 
select '3.1' ID,'3.100' name, '3' parent from dual 
union 
select '3.1.1' ID,'3.1.100' name, '3.1' parent from dual 
union 
select '3.1.2' ID,'3.1.2.100' name, '3.1' parent from dual 
union 
select '4.1' ID,'4.100' name, '4' parent from dual 
union 
select '4.1.1' ID,'4.1.100' name, '4.1' parent from dual 
union 
select '4.1.2' ID,'4.1.2.100' name, '4.1' parent from dual) 
select * from test_data 
start with parent is null 
connect by parent=prior id 

我希望看到的結果

ROWID 4沒有被選擇爲子集的部分是父,但是由於4.1是最上面的在這組數據,我想返回該行。所以基本上,我想看到每個層次結構的所有最高級別記錄。

謝謝。

回答

4

一種方法是使用not exists

select id, name, parent 
from test_data td 
where not exists (select 1 
        from test_data td2 
        where td.parent = td2.id 
       );