Для рекурсивного вывода parent и child в SQL можно использовать общепринятый подход, основанный на использовании общего термина (CTE - Common Table Expression) и оператора UNION ALL.
CTE позволяет создать временную таблицу, к которой можно обращаться несколько раз, позволяя тем самым рекурсивно запрашивать данные. UNION ALL объединяет результаты нескольких SELECT-операторов.
В данном случае мы будем использовать одну таблицу, называемую "your_table", которая содержит столбцы parent и child.
Вот как можно выполнить рекурсивное обновление:
WITH RECURSIVE cte (parent, child) AS (
SELECT parent, child
FROM your_table
WHERE parent = 'start_node' -- начальный узел, с которого начинается рекурсия
UNION ALL
SELECT your_table.parent, your_table.child
FROM your_table
JOIN cte ON cte.child = your_table.parent
)
SELECT parent, child
FROM cte;
В данном примере мы создаем CTE под названием "cte", который содержит начальный узел с указанным "start_node" в столбце parent. Затем мы рекурсивно объединяем CTE с таблицей your_table используя оператор JOIN и условие ON, чтобы связать child из CTE с parent из your_table.
После этого мы выбираем parent и child из CTE, который содержит все рекурсивно обновленные значения.
Таким образом, этот запрос позволяет рекурсивно получить все parent и child из вашей таблицы, начиная с указанного узла "start_node".