Изменения документа Рекурсивный запрос
Редактировал(а) Alexandr Fokin 2023/12/16 14:12
От версии 4.1
отредактировано Alexandr Fokin
на 2022/03/19 13:10
на 2022/03/19 13:10
Изменить комментарий:
К данной версии нет комментариев
К версии 5.1
отредактировано Alexandr Fokin
на 2022/03/19 13:16
на 2022/03/19 13:16
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (2 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Родительский документ
-
... ... @@ -1,1 +1,1 @@ 1 -Разработка.Базы данных.SQL. MSSQL.SQLзапросы.WebHome1 +Разработка.Базы данных.SQL.PostgreSQL.PL pgSQL.WebHome - Содержимое
-
... ... @@ -1,50 +1,7 @@ 1 +Аналог MsSql: [[Рекурсивный запрос>>doc:Разработка.Базы данных.SQL.MSSQL.SQL запросы.Рекурсивный запрос.WebHome]] 2 + 1 1 Запрос задействует механизм [[CTE>>doc:Разработка.Базы данных.SQL.MSSQL.TSQL.CTE.WebHome]]. 2 2 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 15 15 16 - UNION ALL 17 - 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 -) 28 - 29 -SELECT 30 - id, 31 - space(level) + nm as nm 32 -FROM tree 33 -ORDER BY pathstr 34 -{{/code}} 35 - 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 -Это немного усложнит модель - в случае выполнения update нужно не забыть обновить оба поля. (Чтобы не допустить состояния, когда родительский элемент принадлежит к другому Root элементу) 47 - 48 ----- 49 - 50 - 6 +Рекурсивные запросы в PostgreSQL (WITH RECURSIVE) 7 +https://habr.com/ru/post/269497/