Задать вопрос
@Ivan_R2

Как присвоить значения из рекурсивной выборки в PostgreSQL?

Здравствуйте!
Есть запрос, который возвращает результат в виде
id | manager_id | level | star_level 
----+------------+-------+------------
  1 |       NULL |     1 |          0
  2 |          1 |     2 |          1
  3 |          2 |     3 |          1
  4 |          3 |     4 |          2
  5 |          4 |     5 |          2
  6 |          5 |     6 |          2
  7 |          6 |     7 |          3
  8 |          7 |     8 |          3
  9 |          8 |     9 |          4
(9 rows)


Сам запрос:
WITH RECURSIVE parents AS (
  SELECT e.id
       , e.manager_id
       , 1 AS level
       , CAST(s.is_star AS INTEGER) AS star_level
    FROM employees AS e
         INNER JOIN skills AS s
            ON e.skill_id = s.id
   WHERE manager_id IS NULL
UNION ALL
  SELECT e.id
       , e.manager_id
       , p.level + 1 AS level
       , p.star_level + CAST(s.is_star AS INTEGER) AS star_level
    FROM employees AS e
         INNER JOIN skills AS s
            ON e.skill_id = s.id
         INNER JOIN parents AS p
            ON e.manager_id = p.id
   WHERE e.manager_id = p.id
)
SELECT *
  FROM parents
;

Подскажите, пожалуйста, как нужно изменить запрос, чтобы сразу в нем сделать запись колонок level и star_level?

Демо данные:
create table Employees(
    id INT,
    name VARCHAR,
    manager_id INT,
    skill_id INT,
    level INT,
    star_level INT
    
);

 create table Skills(
    id INT,
    name VARCHAR,
    is_star BOOL
);

INSERT INTO Employees
    (id, name, manager_id, skill_id)
VALUES
    (1, 'Employee 1', NULL, 1),
    (2, 'Employee 2', 1, 2),
    (3, 'Employee 3', 2, 3),
    (4, 'Employee 4', 3, 4),
    (5, 'Employee 5', 4, 5),
    (6, 'Employee 6', 5, 1),
    (7, 'Employee 7', 6, 2),
    (8, 'Employee 8', 7, 3),
    (9, 'Employee 9', 8, 4)
    ;

INSERT INTO Skills
    (id, name, is_star)
VALUES
    (1, 'Skill 1', FALSE),
    (2, 'Skill 2', TRUE),
    (3, 'Skill 3', FALSE),
    (4, 'Skill 4', TRUE),
    (5, 'Skill 5', FALSE)
    ;
  • Вопрос задан
  • 123 просмотра
Подписаться 1 Средний 3 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Продвинутый SQL
    5 недель
    Далее
  • Академия Эдюсон
    SQL-разработчик: тариф Базовый
    2 месяца
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы