Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Составление SQL-запросов > Update с использованием рекурсивного запроса |
Автор: polin11 10.6.2019, 15:21 | ||||
Использую postgresql. Есть иерархическая таблица, поле с иерархией parent_id, нужно заполнить level - уровень вложенности, hier - строка с названиями родителями (исключая корень таблицы), root - значения корня иерархии (если у предка в поле new_root = true, то у потомков в поле root должен быть id этого предка). Пример можно посмотреть https://www.db-fiddle.com/f/ezdc4n5ivhHrHk6rDJgZUo/0
Написал запрос:
Посоветуйте, как можно улучшить запрос??? |
Автор: Akina 10.6.2019, 16:59 |
Господи, подзапросы-то зачем??? Покажите требуемый вывод (непонятно, что должно получиться в поле hier...) |
Автор: polin11 10.6.2019, 17:42 |
см. скрин, как это сделать без подзапросов, ведь hier формируется как скленые через # название всех родителей (кроме корня иерархии)? |
Автор: Akina 10.6.2019, 22:24 |
Почему для ID=7 и ID=8 значение root равно 5, а для всех остальных 1? Почему "Планета Земля" не включается в hier? Что за поле new_root? |
Автор: Zloxa 10.6.2019, 23:20 |
А что именно вас не устраивает в том запросе, который вы просите улучшить? |
Автор: Zloxa 10.6.2019, 23:52 | ||||
|
Автор: polin11 11.6.2019, 04:02 | ||||
Поле new_root - логическое поле, если значение True, то у всех потомком этого узла должно быть значение root = id этого узла, а не корня иерархии, поэтому для ID=7 и ID=8 значение root равно 5, а для всех остальных 1 Почему "Планета Земля" не включается в hier, потому что такое требование задачи Добавлено через 5 минут и 2 секунды
1) рекурсивные запросы для меня пока темный лес 2) хочется отказаться от вложенных запросов в рекурсивной части 3) на больших таблицах, запрос выполняется в таком виде медленно |
Автор: Zloxa 11.6.2019, 14:47 |
При этом Вы не озвучили ни одного вопроса по механике работы рекурсивных запросов. Чем мы можем Вам тут помочь? Хочется... казалось бы какая нам *тут* разница чего *там* кому хочется? выполняйте на маленьких. ![]() Я к тому, что есть некие правила этики, которым, определенно стоит следовать когда Вы обращаетесь за *помощью*. Сейчас, с моей стороны, Ваш вопрос выглядит как "Я вот тут наовнокодил, нате, гляньте, наведите порядок, исправьте, мне тут *хочется*". Вы уж простите, но при таком отношении возникает острое желание Вас взаимно обмакнуть. Однако, следует отдать Вам должное. Помимо неврнятных экзерсисов вы еще как-то попытались описать стоящую перед Вами задачу, подготовили тестовый набор данных, показали ожидаемый результат, подготовили фидл. Это, безусловно, делает Вам огромную честь. По предложенному мною решению у Вас какие-то комментарии, вопросы, замечания? Хотя бы вежливое "спасибо", нет? |
Автор: polin11 12.6.2019, 17:03 | ||
Я допустил неточность в описании результата, оказывается у корня иерархии Планета Земля поле root должно быть null, я ваш запрос подправил. Ваш запрос намного логичнее и понятнее моего первоначального. Большое спасибо за помощь новичку в понимании языка SQL!!!
|