Ответ
Сложные CTE (Common Table Expressions) — это временные результаты запроса, которые можно использовать внутри другого SQL-запроса. В отличие от простых CTE, сложные могут включать рекурсию, множественные подзапросы или агрегацию.
Пример рекурсивной CTE для обхода дерева:
WITH RECURSIVE tree AS (
SELECT id, parent_id, name FROM nodes WHERE parent_id IS NULL
UNION ALL
SELECT n.id, n.parent_id, n.name FROM nodes n
JOIN tree t ON n.parent_id = t.id
)
SELECT * FROM tree;
Особенности:
- Могут ссылаться на себя (рекурсия).
- Позволяют разбивать сложные запросы на логические блоки.
- Улучшают читаемость SQL-кода.
- Временные, существуют только во время выполнения запроса.