|
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
|
||||||||||||||||
Запрос на выборку иерархии родителей03.01.2025, 20:02. Показов 901. Ответов 16
Метки нет (Все метки)
Доброго времени суток, коллеги. Прошу вашей помощи, бьюсь весь день, все решения, приходящие в голову отрабатывают неверно.
Суть: есть иерархия отделов (будем называть все это "отделами"). Всего 3 уровня вложенности, есть главный "отдел", у него есть дочерние отделы, а у дочерних отделов есть еще дочерние отделы. Пример цепочки иерархии: 1. Административный департамент => 1.6. Управление административно-хозяйственной деятельности => 1.6.1. Отдел ИТ Структура БД создана таким образом, что внесены ID отдела и ID отдела-родителя для каждой записи. Нужно брать ID отдела-родителя и искать его родителя выше. Единственное адекватное решение в моей голове - рекурсия и ОТВ, но запросы отрабатывают некорректно, либо после 2 уровня некорректно выводят 3 уровень, либо уже на 2 уровне не хотят видеть родителей правильно. Помогите с решением. В итоге необходимо отобразить иерархию в любом виде: либо в столбцах (3 столбца-уровня), либо объединить concat`ом, не суть. Неуспешные попытки:
Структура таблиц:
Пример иерархии: 1. Административный департамент 1.1. Административный департамент 1.2. Договорной отдел 1.3. Общий отдел 1.4. Отдел закупок 1.5. Отдел протокольного сопровождения 1.6. Управление административно-хозяйственной деятельности 1.6.1. Отдел ИТ 1.6.2. Управление административно-хозяйственной деятельности 1.7. Управление безопасности 1.8. Управление по обеспечению безопасности 2. Академия Умные дороги 2.1. Академия Умные дороги 2.2. Отдел сетевых программ 2.3. Проектно-аналитический отдел 2.4. Учебно-организационный отдел 3. Аппарат управления 4. Департамент коммуникаций 4.1. Департамент коммуникаций 4.2. Управление по PR-проектам 4.2.1. Отдел по организации и сопровождению мероприятий 4.2.2. Отдел по работе с корпорациями 4.3. Управление Пресс-службы 4.3.1. Отдел по работе со СМИ 4.3.2. Отдел цифровых коммуникаций 4.3.3. Управление Пресс-службы 5. Департамент маркетинга и партнерских отношений 5.1. Департамент маркетинга и партнерских отношений 5.2. Управление маркетинга 5.2.1. Лицензионный отдел 5.2.2. Управление маркетинга 5.3. Управление по развитию бизнеса 5.3.1. Отдел по привлечению новых клиентов 5.3.2. Отдел по организации мероприятий 5.4. Управление по развитию партнерских отношений 6. Департамент по организации корпоративов 7. Департамент по работе с персоналом 8. Департамент по работе с промышленностью 9. Департамент стратегии и планирования 9.1. Аналитический отдел 9.2. Отдел проектного управления 10. Управление Финансового планирования и контроля 11. Финансово-экономический департамент 11.1. Управление бухгалтерского и налогового учета 11.2. Управление казначейства 11.2.1. Операционный отдел 11.3. Финансово-экономический департамент 11.4. Финансово-экономическое управление 12. Юридический департамент 12.1. Управление нормативного обеспечения и договорной работы 12.2. Юридический департамент
0
|
||||||||||||||||
| 03.01.2025, 20:02 | |
|
Ответы с готовыми решениями:
16
Рекурсивный запрос всех родителей
Запрос по иерархии справочника |
|
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
|
||
| 03.01.2025, 20:54 | ||
|
и если их реально 3 то рекурсия там как мертвому припарка, элементарно одни запросом
0
|
||
|
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
|
|
| 03.01.2025, 20:59 [ТС] | |
|
Аватар, есть возможность помочь с запросом? Была бы очень благодрана. Свой вариант, до которого дошла выше указала, не помогло...
0
|
|
|
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
|
|
| 03.01.2025, 21:07 | |
Сообщение было отмечено AlenaAAAAA как решение
Решение
так сначала с данными разберись, а потом и запрос, у тебя он в правильном направлении, второй, что без рекурсии. только в подзапросе выдерни все с депарвметров, а во внешнем прицепи наименования. ну и where d.IdParentDepartment is null в нужное место втули.
скобок квадратніх наставлено где надо и не надо, вернее везде где не надо )) они же мешают восприятию
1
|
|
|
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
|
|
| 03.01.2025, 21:29 [ТС] | |
|
Аватар, прошу прощения, скрипт так выгружается. Спасибо, попробую!
0
|
|
|
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
|
||||||
| 03.01.2025, 21:40 | ||||||
0
|
||||||
|
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
|
|
| 03.01.2025, 21:43 [ТС] | |
|
invm, спасибо, попробую
0
|
|
|
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 04.01.2025, 10:47 [ТС] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
invm, не помогло
![]() некорректно определяет уровень вложенности на 3 иерархии, ну и почти всё осталось также, неправильный порядок следования в иерархии. например, корректный:
в запросе:
или:
в запросе:
хотя, Управление Пресс-службы и АХД не является родителем для него, они вообще чужие родители: вот, что на выводе:
Добавлено через 1 минуту А с данными что может быть не так?.... Вроде бы структура корректная
0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
|
||
| 04.01.2025, 11:36 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
|
||||||
| 04.01.2025, 14:14 [ТС] | ||||||
|
Аватар, 1000 раз проверила данные, все ок, не вижу ошибок, аж глазами сверяла + запросами.
5 уровней вложенности у меня нет по данным, это рекурсия так отрабатывает ![]() пробовала реализовать и иные связи, но в итоге все равно та же проблема В любом случае, спасибо за советы, может до меня дойдет когда-нибудь) структура таблиц в нормальном виде такая:
0
|
||||||
|
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
|
|
| 04.01.2025, 15:26 | |
|
ага, смотрю в книгу вижу фигу. найди например департамент с id=46 и проследи по цепочке родителей от него. если это непосильная задача то сдаюсь )
0
|
|
|
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
|
|||||||||||||
| 04.01.2025, 15:47 [ТС] | |||||||||||||
|
Аватар, их всего по справочнику 42 шт. а самих связей 51, так что 46 быть не может на данный момент. ну, если это не важно, то возьмем любой другой, например, 16 (на 3 ур. вложенности).
беру 27 - родитель
в том случае, если id такой встречается дважды, то нужно найти запись, где IdDepartmentName != IdParentDepartment, т.к. в структуре есть связь подчинения (в этом случае) Управление административно-хозяйственной деятельности - Управление административно-хозяйственной деятельности (а отделы это "разные"). Если id встречается единожды, то берем его и дальше по цепочке. в нашем случае дважды, ищу запись, где IdDepartmentName != IdParentDepartment
ищу id = 1
родитель is null => цепочка закрыта Отдел ИТ => Управление административно-хозяйственной деятельности => Административный департамент
0
|
|||||||||||||
|
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
|
|||||||
| 04.01.2025, 15:58 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
|
|
| 04.01.2025, 16:23 [ТС] | |
|
Аватар, иной структуры я не могу придумать. при условии дублирования IdDepartmentName, а он дублируется, нельзя его назначить PK. также как и нельзя организовать связь по-другому именно из-за этого..... еще раз спасибо, когда-нибудь дойду до решения)
0
|
|
|
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
|
|
| 04.01.2025, 16:29 | |
|
нормальная у тебя структура, данные не нормальные
0
|
|
|
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
|
||
| 04.01.2025, 21:18 | ||
|
Запрос работает исключительно по иерархии id -> idParentDepartment Поэтому, если результат не устраивает - разбирайтесь с исходными данными Порядок, в пределах idParentDepartment - алфавитный. Ровно как в вашем оригинальном запросе. Если нужен другой, то, опять же, он должен быть задан в исходных данных.
0
|
||
|
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
|
|
| 05.01.2025, 17:07 [ТС] | |
|
invm, Аватар, ужас, коллеги, я поняла проблему, все получилось, спасибо)
0
|
|
| 05.01.2025, 17:07 | |
|
Помогаю со студенческими работами здесь
17
Запрос в иерархии таблиц
Написать запрос, возвращающий пары отец-мать, где для одного из родителей не заполнено или не совпадает поле ИД супруга с другим родителем
Запрос на выборку Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|