powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вывести иерархию организации
5 сообщений из 5, страница 1 из 1
Вывести иерархию организации
    #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
Вывести иерархию организации
    #40009546
MikeR.Ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По классике иерархия всегда перебирается рекурсией.
MikeR.Ru
Для рекурсии используют CTE
Только надо понимать, что рекурсия сильно много потребляет ресурсов в любых языках.
Ну и реально лучше начать с изучения плана запроса.
...
Рейтинг: 0 / 0
Вывести иерархию организации
    #40009576
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GenaV,
Тебе сюда 12561782
...
Рейтинг: 0 / 0
Вывести иерархию организации
    #40009597
GenaV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MikeR.Ru, спасибо за ссылку!
...
Рейтинг: 0 / 0
Вывести иерархию организации
    #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
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вывести иерархию организации
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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