ツリー データがあり、ルートの親のみを選択しようとしています。データはより大きなセットのサブセットである可能性があるため、親が空でない可能性があります。データセット内の各ツリーの最上位レベルを取得したいと考えています。
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 がこのデータ セットの最上位であるため、その行を返したいと考えています。基本的に、各階層の最上位レベルのレコードをすべて表示したいと思います。
ありがとうございました。