SQL db2 запрос на обновление для нескольких строк - PullRequest
0 голосов
/ 05 ноября 2018

Я обновляю записи по следующим запросам:

update tableA set Quantity=
(select count(*) from table B where ID=x)
where ID=x

update tableA set Quantity=
(select sum(Stock) from table C where ID=y)
where ID=y 

Пример (Corrected):

enter image description here

Все идентификаторы из таблицы A разделены на 2 таблицы: TableB и TableC. Я должен обновить поле количества TableA с счетчиком TableB (если ID.TableA находится в TableB) и обновить поле количества TableA с солнцем (запасом) TableC (если ID.TableA находится в TableC)

Существуют 500k идентификаторов, которые будут обновляться следующим образом. Мне было интересно, как это можно сделать без выполнения 500 000 запросов.

РЕДАКТИРОВАТЬ: я извлекаю количество строк из TableB, count не является столбцом для TableB.

Любая помощь будет оценена, TIA!

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Имена ваших таблиц и столбцов не на 100% понятны мне из вашего вопроса, поэтому я немного о них догадываюсь. Исправьте, если необходимо:

update tablea a set quantity = case
  when (select count(*) from tableb where b.id = a.id) is not null then
    (select count(*) from tableb b where b.id = a.id)
  else
    (select sum(stock) from tablec c where c.id = a.id)
  end
0 голосов
/ 05 ноября 2018
declare global temporary table tablea(id int not null, quantity int) with replace on commit preserve rows not logged;
declare global temporary table tableb(id int not null) with replace on commit preserve rows not logged;
declare global temporary table tablec(id int not null, stock int) with replace on commit preserve rows not logged;

insert into session.tablea values (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (6, 0);
insert into session.tableb values 1, 1, 1, 2, 2, 3;
insert into session.tablec values (4, 3), (5, 2), (5, 2), (5, 1), (6, 3), (6, 4);

update session.tableA a 
set Quantity=coalesce(
  nullif((select count(*)   from session.tableb b where b.ID=a.ID), 0)
, (select sum(stock) from session.tablec c where c.ID=a.ID)
);

select * from session.tableA;
0 голосов
/ 05 ноября 2018

Вы можете использовать коррелированный подзапрос:

update tableA
    set Quantity = (select count(*) from table B where B.ID = A.ID)
...