Как рекурсивно(SQL) вывести parent и child?

Для рекурсивного вывода 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".