我有一个树数据,我试图只选择根父母。数据可以是较大集的子集,因此父可能不是空的。我想为数据集中的每个树提供最高级别。
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是此数据集中的最顶层,因此我想返回该行。基本上,我希望看到每个层次结构的所有最高级别记录。
谢谢。
答案 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
);