Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вывести иерархию организации / 5 сообщений из 5, страница 1 из 1
17.10.2020, 16:33
    #40009477
GenaV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести иерархию организации
Друзья, прошу помощи по составлению запроса.
Имеем 2 таблицы:

create table t_dept (
dept_id bigint not null,
dept_name VARCHAR(100),
primary key (dept_id));

create table t_emp (
EMP_ID bigint not null,
DEPT_ID bigint,
CHIEF_ID bigint,
EMP_NAME varchar(100),
SALARY bigint,
primary key (EMP_ID));

alter table t_emp
add constraint EMPLOYEE_EMPLOYEE_FK
foreign key (CHIEF_ID)
references t_emp;

alter table t_emp
add constraint EMPLOYEE_DEPARTMENT_FK
foreign key (DEPT_ID)
references t_dept;


Необходимо сделать запрос выводящий всю иерархию организации.
Отдел (сортировка по названию), под ним руководитель (сортировка по ФИО), под ним сотрудники(в порядке по уменьшению ЗП).
Или хотя бы подскажите куда копать, всю голову сломал...
...
Рейтинг: 0 / 0
18.10.2020, 08:28
    #40009546
MikeR.Ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести иерархию организации
По классике иерархия всегда перебирается рекурсией.
MikeR.Ru
Для рекурсии используют CTE
Только надо понимать, что рекурсия сильно много потребляет ресурсов в любых языках.
Ну и реально лучше начать с изучения плана запроса.
...
Рейтинг: 0 / 0
18.10.2020, 13:07
    #40009576
mefman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести иерархию организации
GenaV,
Тебе сюда 12561782
...
Рейтинг: 0 / 0
18.10.2020, 16:30
    #40009597
GenaV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести иерархию организации
MikeR.Ru, спасибо за ссылку!
...
Рейтинг: 0 / 0
18.10.2020, 17:04
    #40009602
GenaV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести иерархию организации
В результате получился вот такой код:

with recursive performers as (
select
EMP_ID,
EMP_NAME,
CHIEF_ID,
SALARY
from
t_emp
where
EMP_ID = 2
union
select
e.EMP_ID,
e.EMP_NAME,
e.CHIEF_ID,
e.SALARY
from
t_emp e
join performers f on f.EMP_ID = e.CHIEF_ID
)
select *
from
performers
order by SALARY;


Но в таком запросе рекурсия останавливается после вывода сотрудников только одного отдела (dept_id). Не совсем понимаю, как продолжить выборку по остальным оставшимся отделам и при этом выводить название отдела в итоговый результат...
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вывести иерархию организации / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]