2

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

 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 是该数据集中的最高值,我想返回该行。所以基本上,我想查看每个层次结构的所有最顶层记录。

谢谢你。

4

1 回答 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
                 );
于 2015-10-24T02:07:01.383 回答