За последние 24 часа нас посетили 17418 программистов и 991 робот. Сейчас ищут 583 программиста ...

CTE, табличное выражение

Тема в разделе "PostgreSQL", создана пользователем Dimon2x, 12 апр 2022.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Разбираюсь с рекурсивными запросами, вот пример:

    Код (Text):
    1. create table employees
    2. (
    3.     id      serial primary key,
    4.     name    varchar,
    5.     manager int references employees
    6. );
    7.  
    8. insert into employees (id, name, manager)
    9. values (1, 'Kevin Wilkerson', null),
    10.        (2, 'Darin Montgomery', 1),
    11.        (3, 'Joyce Campbell', 1),
    12.        (4, 'Alfred Brewer', 2),
    13.        (5, 'Carroll Jimenez', 3),
    14.        (6, 'Jamie Sims', 3),
    15.        (7, 'Nettie Lawrence', 5);
    Выборка:

    Код (Text):
    1. with recursive managers as (
    2.     select id, name, manager
    3.     from employees
    4.     where name = 'Nettie Lawrence'
    5.  
    6.     union all
    7.  
    8.     select e.id, e.name, e.manager
    9.     from employees as e
    10.              inner join managers as m on e.id = m.manager
    11. )
    12. select id, name, manager
    13. from managers;    
    Во временной таблице выбирается строка, в которой name = Nettie Lawrence

    Потом эта псевдо таблица, объединяется с настоящей.

    У корневого элемента, manager = 5.

    Сначала (7, 'Nettie Lawrence', 5); сравнивается с (5, 'Carroll Jimenez', 3)

    И получается, что после каждой итерации, корневой элемент меняется, правильно ли я понял это?

    То есть, во втором шаге, "where name = 'Nettie Lawrence'" заменяется на Carroll Jimenez?

    И потом уже (6, 'Jamie Sims', 3), сравнивается с (3, 'Joyce Campbell', 1), и так далее.
     
    #1 Dimon2x, 12 апр 2022
    Последнее редактирование: 12 апр 2022