Oracle层次查询仅选择根父级

时间:2015-10-24 01:40:27

标签: sql oracle oracle11g connect-by

我有一个树数据,我试图只选择根父母。数据可以是较大集的子集,因此父可能不是空的。我想为数据集中的每个树提供最高级别。

 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

我希望将结果视为

     ID    NAME      PAR
    ----- --------- ---
    1     100
    2     200
    3     300
    4.1   4.100      4

未选择Rowid 4作为子集的一部分是父级,但由于4.1是此数据集中的最顶层,因此我想返回该行。基本上,我希望看到每个层次结构的所有最高级别记录。

谢谢。

1 个答案:

答案 0 :(得分: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
                 );