Проект «SnakeProject» Михаила КозловаРегистрация

Навигация
⇒SQL\T-SQL⇒

⇐CISCO
⇐Voice(Asterisk\Cisco)
⇐Microsoft
⇐Powershell
⇐Python
⇐FreeBSD and Nix
⇐1С
⇐Общая
⇐WEB Разработка
⇐ORACLE SQL \ JAVA

PostgreSQL: Конструкция With (вызов рекурсии)


Очень простой пример вызова рекурсии с помощью конструкции With в PostgreSQL:

WITH RECURSIVE rec AS (
    --начало рекурсии (по сути якорь)
    SELECT   1 AS i,    1 AS factorial
    
    UNION  
    
    --логическая часть рекурсии  
    SELECT   i+1 AS i,     factorial * (i+1) as factorial 
    FROM r
    WHERE i  <  7
)

SELECT * FROM rec;

 

Живой пример из хранимой функции:

CREATE OR REPLACE FUNCTION GetCategory (p_start_id INT) 
RETURNS TABLE (name VARCHAR(100))
AS $$
WITH RECURSIVE c
AS
(
SELECT id, parent_id, name, 1 AS depth
FROM categories
WHERE Id = p_start_id
 
UNION ALL
 
SELECT cat.id, cat.parent_id, cat.name, c.depth + 1 AS Level
FROM categories cat
INNER JOIN c ON cat.Id = c.parent_id
)
SELECT name
FROM c
ORDER BY depth DESC;
$$ LANGUAGE sql;
 
 
SELECT GetCategory(51);

Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

© Snakeproject.ru создан в 2013 году. При копировании материала с сайта - оставьте ссылку.


Яндекс.Метрика

Goon Каталог сайтов Рейтинг@Mail.ru