Изменения документа Рекурсивный запрос
Редактировал(а) Alexandr Fokin 2023/12/16 14:12
От версии 9.1
отредактировано Alexandr Fokin
на 2023/12/16 14:12
на 2023/12/16 14:12
Изменить комментарий:
Renamed back-links.
К версии 3.1
отредактировано Alexandr Fokin
на 2022/03/19 13:02
на 2022/03/19 13:02
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (2 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Родительский документ
-
... ... @@ -1,1 +1,1 @@ 1 -Разработка.Базы данных 2.SQL.PostgreSQL.PL pgSQL.WebHome1 +Разработка.Базы данных.SQL.MSSQL.SQL запросы.WebHome - Содержимое
-
... ... @@ -1,11 +1,49 @@ 1 - АналогMsSql: [[Рекурсивныйзапрос>>doc:Разработка.Базы данных.SQL.MSSQL.SQLзапросы.Рекурсивный запрос.WebHome]]1 +Запрос задействует механизм [[CTE>>doc:Разработка.Базы данных.SQL.MSSQL.TSQL.CTE.WebHome]]. 2 2 3 -Запрос задействует механизм [[CTE>>doc:Разработка.Базы данных 2.SQL.MSSQL.TSQL.CTE.WebHome]]. 3 +{{code language="sql"}} 4 +WITH RECURSIVE tree (nm, id, level, pathstr) 5 +AS 6 +( 7 + --Первый элемент в выборке. Начало рекурсии 8 + SELECT 9 + nm, 10 + id, 11 + 0, 12 + cast('' as text) 13 + FROM tree_sample 14 + WHERE id_parent is null 4 4 16 + UNION ALL 5 5 6 -Рекурсивные запросы в PostgreSQL (WITH RECURSIVE) 7 -https://habr.com/ru/post/269497/ 18 + --Каждый последующий элемент рекурсии 19 + SELECT 20 + tree_sample.nm, 21 + tree_sample.id, 22 + t.level + 1, 23 + tree.pathstr + tree_sample.nm 24 + FROM tree_sample 25 + INNER JOIN tree 26 + on tree.id = tree_sample.id_parent 27 +) 8 8 29 +SELECT 30 + id, 31 + space(level) + nm as nm 32 +FROM tree 33 +ORDER BY pathstr 34 +{{/code}} 9 9 10 -Recursive query with sum in Postgres 11 -https://stackoverflow.com/questions/26660189/recursive-query-with-sum-in-postgres 36 +Рекурсивные SQL запросы 37 +https://habr.com/ru/post/27439/ 38 + 39 +---- 40 + 41 +**Дополнение:** 42 + 43 +В некоторых случаях рекурсивного запроса можно избежать (в случае извлечения из хранилища некоторого агрегата). 44 +Достаточно помимо ключа/отношения Parent-Child, добавить ключ/отношение Root-Child. 45 +Таким образом можно извлечь все поддерево Root элемента за 1 Join. 46 + 47 +---- 48 + 49 +