Рекурсивная загрузка дерева с вспомогательной таблицей, по ID, как?
Привет всем,
пытаюсь с помощью рекурсии, за один запрос к базе подтянуть полное дерево связей, а точнее последнюю точку связи, имея одно лишь ID объекта.
Есть две таблицы:
objects:
id, name
1, Тест
2, Паша
3, Маша
4, Петя,
5, Саша
При запросе с ID 3 хочу получить 3, 4 и 5.
Глубина связей теор. бесконечна.
Возможно ли это только посредством SQL или всёже прийдётся несколько запросов делать?
У меня пока не получилось - не придумал. Дальше первой связи не ухожу.
1. Поле id в таблице связей избыточно.
2. Вот выбор элемента и его потомков
with
recursive child_elements as (
(select id
from links
where id = 3)
union
(select lt.id
from child_elements, links as lt
where child_elements.id = lt.parent_id))
select *
from child_elements;
Спасибо, почти попали..
Вот решение, благодоря Вашему примеру
with
recursive child_elements as (
(select child_id, parent_id
from object_map
where bopm_db_id = 3)
union
(select lt.child_id, lt.parent_id
from child_elements, object_map as lt
where child_elements.parent_id = lt.child_id))
select *
from child_elements;
По поводу 1. Пункта - избыточно для этих целей, но есть и другие..
UPD.: Кстати решение к сожалению не исчерпывающее. Ибо при запросе по айди 3, я получаю только 4,5