Рекурсия в SQL запросе POSTGRESQL?

Есть таблица с полями id id_parent

1 2
2 *
3 1
4 5
5 6
6 4
7 *

на выходе мне нужен список id:
1 -> 2-> *(null) : 1,2
Но ещё есть небольшая проблема:
4->5->6->4... (и тут начинается вечный цикл, как сделать проверку?) : 4,5,6

Решение, которое работает, но уходит в вечный цикл и очень тяжелое....
WITH RECURSIVE r AS(
SELECT id ,id_parent
FROM table
WHERE teil_sachnr = '1'
UNION ALL
SELECT table.id,table.id_parent
FROM w_teil
JOIN r ON table.id=r.id_parent
)
SELECT * FROM r;
  • Вопрос задан
  • 288 просмотров
Решения вопроса 1
@d-stream
Готовые решения - не подаю, но...
Собственно вечный цикл может быть в самих данных и соответственно надо бы ограничивать либо рекурсивный cte (в мс sql - это maxrecursion) либо разворачивать рекурсию в цикл и там аналогично контролировать "бесконечное зацикливание" тем или иным способом (ограничение глубины, разрыв при отсылке parent в уровень ниже.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы