Я хочу обновить несколько столбцов таблицы в DB2 с помощью одного оператора Update.
Любой намек или идея будут заметны. Спасибо.
Я хочу обновить несколько столбцов таблицы в DB2 с помощью одного оператора Update.
Любой намек или идея будут заметны. Спасибо.
Операция обновления во всех версиях SQL выглядит следующим образом:
update table
set col1 = expr1,
col2 = expr2,
. . .
coln = exprn
where some condition
Итак, ответ заключается в том, что вы разделяете назначения с помощью запятых и не повторяете оператор set
.
Если значения взяты из другой таблицы, вы можете использовать
UPDATE table1 t1
SET (col1, col2) = (
SELECT col3, col4
FROM table2 t2
WHERE t1.col8=t2.col9
)
Пример:
UPDATE table1
SET (col1, col2, col3) =(
(SELECT MIN (ship_charge), MAX (ship_charge) FROM orders),
'07/01/2007'
)
WHERE col4 = 1001;
Я знаю, что это старый вопрос, но мне просто нужно было найти решение для обновления нескольких строк, когда несколько записей пришлось обновлять с разными значениями на основе их идентификаторов, и я обнаружил, что могу использовать скаляр-подселек:
UPDATE PROJECT
SET DEPTNO =
(SELECT WORKDEPT FROM EMPLOYEE
WHERE PROJECT.RESPEMP = EMPLOYEE.EMPNO)
WHERE RESPEMP='000030'
(с WHERE необязательно, конечно)
Кроме того, я обнаружил, что очень важно указать, что в этом обновлении не будут использоваться значения NULL (если не все записи в первой таблице имеют соответствующую запись во втором), следующим образом:
UPDATE PROJECT
SET DEPTNO =
(SELECT WORKDEPT FROM EMPLOYEE
WHERE PROJECT.RESPEMP = EMPLOYEE.EMPNO)
WHERE RESPEMP IN (SELECT EMPNO FROM EMPLOYEE)
Источник: https://www.ibm.com/support/knowledgecenter/ssw_i5_54/sqlp/rbafyupdatesub.htm
update table_name set (col1,col2,col3) values(col1,col2,col);
Не является стандартным SQL и не работает вы должны использовать это как Гордон Линофф сказал:
update table
set col1 = expr1,
col2 = expr2,
. . .
coln = exprn
where some condition
Это "старое школьное решение", когда команда MERGE не работает (думаю, до версии 10).
UPDATE TARGET_TABLE T
SET (T.VAL1, T.VAL2 ) =
(SELECT S.VAL1, S.VAL2
FROM SOURCE_TABLE S
WHERE T.KEY1 = S.KEY1 AND T.KEY2 = S.KEY2)
WHERE EXISTS
(SELECT 1
FROM SOURCE_TABLE S
WHERE T.KEY1 = S.KEY1 AND T.KEY2 = S.KEY2
AND (T.VAL1 <> S.VAL1 OR T.VAL2 <> S.VAL2));