Поиск кратчайшего пути в графе на SQL

Пишу SQL -код для поиска кратчайшего пути(От 'S' в 'Y'), остановился на подсчёте суммарной стоимости

with recursive  temp AS
(select id, array[id] as path,weight as price,
        false as cycle
    from "DbWorkHierarchy"
    where id ='S'
    UNION ALL
    SELECT "DbWorkHierarchy".id, temp.path || "DbWorkHierarchy".id as path,
           "DbWorkHierarchy".id= any(temp.path) as cycle,
             temp.price + "DbWorkHierarchy".weight as price
    from "DbWorkHierarchy" JOIN temp on(temp.id ="DbWorkHierarchy".par_id) AND NOT cycle )
SELECT id,path,price from temp;

Получаю вот такую ошибку:

[2020-11-20 16:20:04] [42804] ОШИБКА: в конструкции UNION нельзя обобщить типы integer и boolean [2020-11-20 16:20:04] Позиция: 276

Вот таблица: введите сюда описание изображения

Что я делаю не так? Притом, если не считать суммарный вес(price), всё работает.

введите сюда описание изображения

Примечание: Граф ориентирован, направление от par_id к id


Ответы (1 шт):

Автор решения: handsome16

Спасибо пользователям tym32167,Akina. Я действительно неправильно указал порядок полей в подзапросах. Итого решение такое :

with recursive  temp AS
(select id, array[id] as path,0 as price,
        false as cycle
    from "DbWorkHierarchy"
    where id ='S'
    UNION ALL
    SELECT "DbWorkHierarchy".id, temp.path || "DbWorkHierarchy".id as path,
           temp.price + "DbWorkHierarchy".weight as price,
           "DbWorkHierarchy".id= any(temp.path) as cycle

    from "DbWorkHierarchy" JOIN temp on(temp.id ="DbWorkHierarchy".par_id) AND NOT cycle )
SELECT id,path,price from temp where id = 'Y' and price in (select min(price) from temp where id='Y');
→ Ссылка