Добрый день.
Помогите пожалуйста написать нужный селект.
Есть 4 таблицы с такими данными:
create table INS(i NUMBER);
create table REL(s NUMBER,o NUMBER);
create table CON(ci NUMBER,cnum varCHAR2(10));
create table CNT(ci NUMBER,cnum varCHAR2(10));
insert into INS (i) values (1);
insert into INS (i) values (2);
insert into INS (i) values (3);
insert into INS (i) values (4);
insert into INS (i) values (5);
insert into INS (i) values (6);
insert into INS (i) values (7);
insert into INS (i) values (8);
insert into INS (i) values (9);
insert into INS (i) values (10);
insert into INS (i) values (11);
insert into INS (i) values (12);
insert into INS (i) values (13);
insert into INS (i) values (14);
insert into INS (i) values (15);
insert into INS (i) values (16);
insert into INS (i) values (17);
insert into INS (i) values (18);
insert into INS (i) values (19);
insert into INS (i) values (20);
insert into REL (s, o) values (1, 5);
insert into REL (s, o) values (7, 9);
insert into REL (s, o) values (11, 15);
insert into REL (s, o) values (17, 19);
insert into CON (ci, cnum) values (1, '111');
insert into CON (ci, cnum) values (5, '555');
insert into CON (ci, cnum) values (3, '333');
insert into CON (ci, cnum) values (9, '999');
insert into CON (ci, cnum) values (11, 'a11');
insert into CON (ci, cnum) values (18, '188');
insert into CNT (ci, cnum) values (2, '22222');
insert into CNT (ci, cnum) values (1, '11111');
insert into CNT (ci, cnum) values (17, '171717');
insert into CNT (ci, cnum) values (3, '33333);
insert into CNT (ci, cnum) values (15, '151515');
insert into CNT (ci, cnum) values (5, '55555');
В таблице REL содержатся отношения между элементами из INS, а таблицах CON, CNT данные для INS.
Нужно принести все строки из INS.
Для каждого элемента INS.i и REL.o где INS.i = REL.s(+) нужно принести данные из CON и CNT, где
INS.i = CON.ci(+) и INS.i = CNT.ci(+).
Т.е. если в CON есть данные и для INS.i и для REL.o принести все строки данных для них. Если нет для INS.i, но есть для REL.o, то принести только для REL.o но поместить их в строку INS.i. Если нет для обоих, то INS.i будет с пустыми данными.
Если для INS.i есть данные и в CON и в CNT, они должны быть в одной строке.
Для этих данных селект должен вернуть 21 строку:
Num INS.I CON.CI CNUM_1 CNT.CI CNUM_2
1 1 1 111 1 11111
2 1 5 555 5 55555
3 2 2 22222
4 3 3 333 3 33333
5 4
6 5 5 555 5 55555
7 6
8 7 9 999
9 8
10 9 9 999
11 10
12 11 11 a11 15 151515
13 12
14 13
15 14
16 15 15 151515
17 16
18 17 17 171717
19 18 18 188
20 19
21 20
Данные только для примера, на самом деле таблицы гораздо больше и INS.i например - семизначный индекс.