Код IT
← Каталог

Общие табличные выражения (CTE) — Рекурсивные выражения с ограничениями

Фрагмент из «Общие табличные выражения (CTE)»: Рекурсивные выражения с ограничениями.

SQL main.sql
WITH RECURSIVE дерево_категорий AS (
    SELECT 
        category_id,
        category_name,
        parent_category_id,
        category_name AS full_path,
        1 AS level
    FROM categories
    WHERE parent_category_id IS NULL
    
    UNION ALL
    
    SELECT 
        c.category_id,
        c.category_name,
        c.parent_category_id,
        CONCAT(dc.full_path, ' > ', c.category_name) AS full_path,
        dc.level + 1 AS level
    FROM categories c
    INNER JOIN дерево_категорий dc ON c.parent_category_id = dc.category_id
    WHERE dc.level < 10
)
SELECT 
    category_id,
    category_name,
    full_path,
    level
FROM дерево_категорий
ORDER BY full_path;
WITH RECURSIVE дерево_категорий AS (
    SELECT 
        category_id,
        category_name,
        parent_category_id,
        category_name AS full_path,
        1 AS level
    FROM categories
    WHERE parent_category_id IS NULL
    
    UNION ALL
    
    SELECT 
        c.category_id,
        c.category_name,
        c.parent_category_id,
        CONCAT(dc.full_path, ' > ', c.category_name) AS full_path,
        dc.level + 1 AS level
    FROM categories c
    INNER JOIN дерево_категорий dc ON c.parent_category_id = dc.category_id
    WHERE dc.level < 10
)
SELECT 
    category_id,
    category_name,
    full_path,
    level
FROM дерево_категорий
ORDER BY full_path;