With Recursive In Postgresql
Рекурсивные запросы в PostgreSQL.
Сегодня прочел одноименную статью на хабре на практике рекурсивные запросы оказались довольно просты.
Нужно помнить всего лишь
- про синтаксис (прописывается через использование WITH c ключевым словом recursive).
- внутри with состоит из двух подзапросов, объединенных через union.
Подзапрос 1. Это базовая или стартовая информация Подзапрос 2. Это рекурсивные данные.
Алгоритм получается примерно следующий:
- Вычисляем стартовую информацию.
- Выносим ее в рекурсивную таблицу.
- Используя рекурсивную таблицу, вычисляем второй подзапрос.
- Во втором подзапросе появились новые (отсутствовавшие) данные? a. Да. Выносим данные в рекурсивную таблицу, переходим к пункту 3. b. Нет. Выходим из рекурсии.
пример запроса
with recursive recr_table as (
--базовая часть
select base_data_part.\*
from original_table_name as base_data_part
union
--рекурсивная часть
select recr_data_part.\*
from original_table_name recr_data_part
join recr_table
on recr_table.parent_column = recr_data_part.children_column)
select *
from recr_table;