powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / сложный update
5 сообщений из 5, страница 1 из 1
сложный update
    #39368444
Santex78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то мои познания в SQL оказались пока слабоваты для следующей одноразовой задачи:
Есть стандартная иерархическая структура родитель-наследник, все записи хранятся в одной таблице. Для каждой записи есть ID, ссылка на родителя PARENT_ID и поле ORDER_NUMBER:

Таблица, пусть название её будет NODE, поля
ID - собственно, самый обычный автоинкрементный PK;
PARENT_ID - ссылка на наследника, NULL если такового нет;
ORDER_NUMBER - порядковый номер;

Задача: обновить ORDER_NUMBER, для всех групп дочерних элементов установив его в соответствии с номерами строк, запроса, который можно себе представить как
Код: plsql
1.
 select * from NODE where PARENT_ID = ... order by ID 



То есть расставить в порядке добавления каждого потомка.

Подскажите, пожалуйста, как такое можно сотворить. Спасибо.
...
Рейтинг: 0 / 0
сложный update
    #39368506
legg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santex78Что-то мои познания в SQL оказались пока слабоваты для следующей одноразовой задачи:
Есть стандартная иерархическая структура родитель-наследник, все записи хранятся в одной таблице. Для каждой записи есть ID, ссылка на родителя PARENT_ID и поле ORDER_NUMBER:

Таблица, пусть название её будет NODE, поля
ID - собственно, самый обычный автоинкрементный PK;
PARENT_ID - ссылка на наследника, NULL если такового нет;
ORDER_NUMBER - порядковый номер;

Задача: обновить ORDER_NUMBER, для всех групп дочерних элементов установив его в соответствии с номерами строк, запроса, который можно себе представить как
Код: plsql
1.
 select * from NODE where PARENT_ID = ... order by ID 



То есть расставить в порядке добавления каждого потомка.

Подскажите, пожалуйста, как такое можно сотворить. Спасибо.

нет ораклы под рукой, но значение полей order_number вроде так можно высчитать (если я все правильно понял постановку задачи):
Код: plsql
1.
select row_number() over (partition by nvl(parent_id,-1) order by id), tt.*  from node tt 


ну и апдейтить:)
...
Рейтинг: 0 / 0
сложный update
    #39368510
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santex78запроса, который можно себе представить как+ MERGE
...
Рейтинг: 0 / 0
сложный update
    #39368524
Santex78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
legg,
Спасибо большое вот смотрел я на эту конструкцию:
Код: plsql
1.
over (partition by ... order by ...)

и тупил, что она значит.
А Вы очень помогли :-). Теперь даже на душе легче стало :-).
...
Рейтинг: 0 / 0
сложный update
    #39368528
legg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santex78legg,
Спасибо большое вот смотрел я на эту конструкцию:
Код: plsql
1.
over (partition by ... order by ...)

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


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