==
ここで私の質問の SQL フィドル
鉄鋼工場に関連する次のテーブルがあります
HEATS /* Contains data about raw iron melted from scrap and ores */
SLABS /* Contains data about the output of the first table HEATS */
COILS /* Contains data about the output of SLABS */
質問に関係のない不要なフィールドを削除して、上記の表の構造を簡素化しました
create table heats
( id number,
production_date date,
heat_name varchar(10),
parent number
);
create table slabs
( id number,
production_date date,
slab_name varchar(10),
parent number
);
create table coils
( id number,
production_date date,
coil_name varchar(10),
parent number
);
また、次のようなダミー データを挿入しました (ただし、適切な関係を使用)。
insert into heats values (1,'01-Nov-2012','GRADE A',null);
insert into heats values (2,'01-Nov-2012','GRADE B',null);
insert into heats values (3,'01-Nov-2012','GRADE C',null);
insert into slabs values (10,'02-Nov-2012','SLAB A',1);
insert into slabs values (20,'02-Nov-2012','SLAB B',2);
insert into slabs values (30,'02-Nov-2012','SLAB C',3);
insert into coils values (100,'03-Nov-2012','COIL A.1',10);
insert into coils values (200,'03-Nov-2012','COIL B.1',20);
insert into coils values (300,'03-Nov-2012','COIL C.1',30);
insert into coils values (400,'03-Nov-2012','COIL A.2',100);
insert into coils values (500,'03-Nov-2012','COIL B.2',200);
insert into coils values (600,'03-Nov-2012','COIL C.2',300);
insert into coils values (700,'03-Nov-2012','COIL A.3',400);
insert into coils values (800,'03-Nov-2012','COIL B.3',500);
insert into coils values (900,'03-Nov-2012','COIL C.3',600);
最後の 9 つの INSERTS では、一部のコイルは他のコイルの子になることができ、一部のコイルはスラブの子になることができます。スラブは、Heat の子にしかなれません。Heat には親がありません。
ここで、コイル COIL A.3 の家系図を取得したいと思います。コイルとコイルの間の親子関係を簡単に取得できます。このような
select coil_name from coils c
start with coil_name='COIL A.3'
connect by prior c.parent = c.id
それはうまくいき、出力が得られます
COIL A.3
COIL A.2
COIL A.1
しかし、出力に他のテーブル (ヒートとスラブ) の親も含めたい
COIL A.3
COIL A.2
COIL A.1
SLAB A
HEAT A
しかし、他のテーブル名をクエリに追加して connect by 句を変更しようとすると、クエリが非常に遅くなります。目的の出力をより効率的に達成するにはどうすればよいですか?