私はオラクルの初心者です...比較的言えば...
継承した Oracle テーブルで CTE を使用しようとしています。「トップレベル」が明確に定義されていないという点で、私が望んでいたよりも少し複雑です。
create table testConnectBy ( parent number, child number );
insert into testConnectBy values ( 1, 1);
insert into testConnectBy values ( 1, 11);
insert into testConnectBy values ( 1, 12);
insert into testConnectBy values ( 2, 2);
insert into testConnectBy values ( 2, 13);
insert into testConnectBy values (11, 11);
insert into testConnectBy values (11, 20);
insert into testConnectBy values (11, 21);
insert into testConnectBy values (12, 12);
insert into testConnectBy values (12, 22);
insert into testConnectBy values (12, 23);
insert into testConnectBy values (12, 24);
insert into testConnectBy values (13, 13);
insert into testConnectBy values (13, 30);
insert into testConnectBy values (13, 31);
insert into testConnectBy values (30, 30);
insert into testConnectBy values (30, 40);
このクエリは、必要なすべての行を取得しますが、いくつかの重複があります (これは、問題の最初の部分であり、どのように削除するのが最善かということです)。ループの問題 (親 == 子) があるため、nocycle を含める必要がありました。
select *
from testConnectBy
start with parent = '1'
connect by nocycle prior child = parent;
次の問題は、たとえば 11 を入力して、すべての親と子を見つけられるようにしたいということです。どの親子が11に関係しているかはわかりません。ただ、11を使って見つける必要があります。
このクエリは 11 の子のみを返します。両方の「方向」を返す方法はありますか?
select *
from testConnectBy
start with parent = '11'
connect by nocycle prior child = parent;
前もって感謝します。