|
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 129
|
||||||||||||||||
Запрос на выборку иерархии родителей03.01.2025, 20:02. Показов 917. Ответов 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
Запрос в иерархии таблиц
Написать запрос, возвращающий пары отец-мать, где для одного из родителей не заполнено или не совпадает поле ИД супруга с другим родителем
Запрос на выборку Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|