Мне нужна ваша помощь по поводу рекурсивного запроса, который я хочу сделать.Я создал эту таблицу в DB2:
connect reset;
connect to sample;
DROP TABLE FLIGHTS;
CREATE TABLE FLIGHTS
(START VARCHAR(16) NOT NULL,
DESTINATION VARCHAR(16) NOT NULL,
DISTANCE BIGINT NOT NULL
);
insert into FLIGHTS values ('Dublin','Bhogrol',5340);
insert into FLIGHTS values ('Dublin','Smallville',5500);
insert into FLIGHTS values ('Smallville','Seattle',1300);
insert into FLIGHTS values ('Smallville','Clacton',6700);
insert into FLIGHTS values ('Bhogrol','Moscow',2320);
insert into FLIGHTS values ('Moscow','Seattle',3600);
insert into FLIGHTS values ('Bhogrol','Smallville',2950);
insert into FLIGHTS values ('Rome','Bhogrol',720);
insert into FLIGHTS values ('Clacton','Moscow',6700);
insert into FLIGHTS values ('Rome','Smallville',3050);
insert into FLIGHTS values ('Schippol','Smallville',8990);
insert into FLIGHTS values ('Seattle','Schippol',7840);
insert into FLIGHTS values ('Bhogrol','Clacton',1300);
insert into FLIGHTS values ('Bilbao','Moscow',1270);
insert into FLIGHTS values ('Smallville','Schippol',8990);
Я хочу найти все связанные рейсы из Дублина с менее чем восемью остановками.Выходные данные запроса должны представлять собой набор строк в следующем формате из 3 полей: [маршрут, расстояние, остановки], где поле маршрута представляет собой строку, составленную из аэропортов, посещенных на каждом соединенном пути из Дублина.Это последовательность имен аэропортов, разделенных символом «-».Но вместо полного названия аэропорта просто покажите первые три символа, чтобы каждая строка выглядела, например, как Dub> Sch> Dub> Sma> Sch> Dub> Sma> Cla> Mos.Тип атрибута 'route' должен быть VARCHAR (40).
Я подумал начать таким образом:
WITH path (start, destination, distance, stops)
AS(
SELECT f.start, f.destination, f.distance, 0
FROM flights f
WHERE start = 'Dublin'
UNION ALL
SELECT p.start, f.destination,
p.distance + f.distance, p.stops+1
FROM flights f, path p
WHERE p.destination = f.start AND p.stops < 8
)
SELECT start, destination, distance, stops
FROM path;
Правильно ли это?