Как обновить строки из рекурсивного результата? - PullRequest
1 голос
/ 16 марта 2020

У меня есть таблица, которая представляет простую структуру каталогов (set_id, parent_id -> set_id). Теперь в моем приложении, когда я обновляю каталог, я хочу, чтобы все родители в дереве рекурсивно обновлялись. Я попытался

with recursive parents as (
    select *
    from sets
    where set_id=$1

    union all

    select s.*
    from sets s
    join parents p on p.parent_id=s.set_id
)
update parents
set updated=now();

Но у меня есть ошибка, которая говорит, что дочерние таблицы не существуют. Я думаю, что я слишком устал, я не вижу другого пути сейчас, кто-нибудь может помочь?

Спасибо

1 Ответ

1 голос
/ 16 марта 2020

Вам необходимо присоединиться к столу в update:

with recursive parents as (
    select * from sets where set_id=$1
    union all
    select s.* from sets s join parents p on p.parent_id=s.set_id
)
update sets s
set updated = now()
from parents p
where p.id = s.id;
...