29 сентября 2023 СуБД Postgres RECURSIVE
Рекурсивных запрос к Postgres состоит из двух, объединённых запросов
- запрос задающий начальные условия рекурсии
- запросов определяющий следующую порцию данных для выборы
Рекурсия начинает с добавляния в результат данных от первой выборки и будет продолждать до тех пока второй запрос будет возвращать данные
WITH RECURSIVE family_children as (
select id, 0 as level, fio from family where fio ~ '^Иванов'
union
select family.id, level+1 as level, family.fio from family join parent on family.id=parent.child join family on family.id=parent.id
) select * from family_children;
Приведённы в примере запрос начинается с поиска в Таблице Имён записей всех Ивановых. В результат подмешивается переменная level, level определяет уровень родства
Затем запрос продолжает поиском записей родителей любых Ивановых. При этом уровень родства увеличился единицу
Запросы будут продолжаться пока будут находиться родители для предыдущей порции детей