powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Update записей по результату select
7 сообщений из 7, страница 1 из 1
Update записей по результату select
    #39010680
vitabios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Подскажите пожалуйста по такому вопросу. Есть селект:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT 
adv.COD_ZAP "1", 
sum(ins.SUM_VZNOS) "2"
from PERS.ADV adv
left join PERS.INSVED ins on adv.COD_ZAP = ins.COD_ADV
left join PERS.STRAH sth on sth.COD_ZAP = adv.COD_ORG
where adv.GOD = 2015 and adv.PERIOD = 6 and adv.ACTUAL  = 'T' and ins.COD_ZAP is not null
group by adv.COD_ZAP, sth.REGNUMB


Он выбирает множество записей. Нужно в таблице PERS.ADV сделать update записей, которые попали в данную выборку, то есть найти все записи у которых COD_ZAP равен значениям столбца 1 из результата select'a и обновить поле SUM1 в этой же таблице значениями столбца 2 из результата select'a соответственно.
Как это можно сделать? Можно ли SQL запросом или нужно делать процедуру/функцию?
Можно так же сделать триггер, чтобы после вставки новых записей так же происходил такой update но только по одной вновь вставленной этой записи?
Заранее спасибо!
...
Рейтинг: 0 / 0
Update записей по результату select
    #39010989
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitabios,

Добрый день.

Вы группируете по 2-м полям, а это значит, что у вас по одному COD_ZAP может вернуться несколько сумм - по одной для разных REGNUMB.
Какую же из этих сумм вы хотите записать в SUM1?

Кроме того, для этой задачи можно рассмотреть использование MQT - отдельной таблицы, основанной на этом запросе (или немного другом в зависимости от того, какие еще похожие запросы вы будете делать). Соответствующие изменения данных в этой таблице (refresh) при изменении данных в базовых таблицах DB2 может делать сама сразу (т.н. refresh immediate mqt), либо по отдельной команде (refresh deferred mqt).
Но это будет именно отдельная таблица, а не поле в базовой таблице как вы хотите. Подойдет ли вам такое решение?
...
Рейтинг: 0 / 0
Update записей по результату select
    #39010992
vitabios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,
одна COD_ZAP в моей БД не может принадлежать разным REGNUMB.


Хотелось бы все таки обойтись без материализованных таблиц, это возможно?
...
Рейтинг: 0 / 0
Update записей по результату select
    #39011101
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitabiosодна COD_ZAP в моей БД не может принадлежать разным REGNUMB.Зачем же тогда вы включаете это поле в группировку?
И зачем вообще таблица STRAH здесь используется? Она идет внешним соединением, и, если по какому-то ADV.COD_ORG=STRAH.COD_ZAP будет несколько записей в STRAH, то суммы умножатся на это кол-во записей. Вы точно уверены в правильности такой логики?
INSVED.COD_ZAP допускает NULL? Если нет, в чем смысл left join INSVED и INSVED.COD_ZAP is not null в WHERE? Почему не INNER JOIN?
...
Рейтинг: 0 / 0
Update записей по результату select
    #39011282
vitabios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

таблица STRAH для наглядности была, то есть значению из STRAH я в приложение само входил и проверял правильность выборки. Давайте уберем его из запроса.
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT 
adv.COD_ZAP "1", 
sum(ins.SUM_VZNOS) "2"
from PERS.ADV adv
left join PERS.INSVED ins on adv.COD_ZAP = ins.COD_ADV
where adv.GOD = 2015 and adv.PERIOD = 6 and adv.ACTUAL  = 'T' and ins.COD_ZAP is not null
group by adv.COD_ZAP
...
Рейтинг: 0 / 0
Update записей по результату select
    #39011295
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitabios,

Как-то так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
merge into PERS.ADV adv
using (
select cod_adv, sum(sum_vznos) sum_vznos
from PERS.INSVED
where cod_zap is not null
group by cod_adv 
) ins
on adv.cod_zap = ins.cod_adv 
and adv.god=2015 and adv.period=6 and adv.actual='T'
when matched then update set sum1=ins.sum_vznos
...
Рейтинг: 0 / 0
Update записей по результату select
    #39011301
vitabios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

спасибо попробую.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Update записей по результату select
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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