рассчитать стоимость сегментов маршрута - PullRequest
0 голосов
/ 30 мая 2018

таблица с маршрутами:

route_id | points 
       1 | [A,B] 
       2 | [L,G,C,F,E]

таблица со стоимостью сегментов маршрута:

route_id | point A | pointB | cost
       1 | A       | B      |   10
       2 | L       | G      |   10
       2 | G       | C      |   20
       2 | C       | F      |   15
       2 | F       | E      |   13

необходимо рассчитать стоимость между точками «G» и «E»в route_id = 2

1 Ответ

0 голосов
/ 30 мая 2018

Вы можете достичь желаемого результата, используя «Рекурсивно с предложением».

Таблица:

create table test(
route_id int, 
pointA char,
 pointB char, 
 cost int
);

Значения:

insert into test values(1 ,'A','B',10),
(2 ,'L','G',10),
(2 ,'G','C',20),
(2 ,'C','F',15),
(2 ,'F','E',13)

Рекурсивный запрос:

WITH RECURSIVE routecost AS (
SELECT pointA, pointB ,cost  /* non recursive part */ 
FROM test                   
WHERE pointA = 'G'
  and route_id = 2 
UNION ALL
SELECT b.pointA, a.pointB, a.cost + b.cost   /* recursive part */               
FROM test a                
JOIN routecost b ON(a.pointA = b.pointB)    
  where a.route_id = 2
)
SELECT * FROM routecost
where pointB = 'E'

Объяснение:

  1. Сначала отфильтруйте запрос с pointA и route_id в нерекурсивной части.
  2. Затем в рекурсивной части присоедините его, как показанов запросе и добавьте стоимость
  3. Я получаю b.pointA (в нерекурсивной части) каждый раз, потому что нам нужна начальная точка.
  4. Затем, наконец, я фильтрую ее до значения pointB, чтобы получить требуемый результат.

Ссылка: Рекурсивно с предложением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...