Как обновить несколько столбцов в одном операторе обновления в DB2

Я хочу обновить несколько столбцов таблицы в DB2 с помощью одного оператора Update.

Любой намек или идея будут заметны. Спасибо.

Ответ 1

Операция обновления во всех версиях SQL выглядит следующим образом:

update table
    set col1 = expr1,
        col2 = expr2,
        . . .
        coln = exprn
    where some condition

Итак, ответ заключается в том, что вы разделяете назначения с помощью запятых и не повторяете оператор set.

Ответ 2

Если значения взяты из другой таблицы, вы можете использовать

 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;

Ответ 3

Я знаю, что это старый вопрос, но мне просто нужно было найти решение для обновления нескольких строк, когда несколько записей пришлось обновлять с разными значениями на основе их идентификаторов, и я обнаружил, что могу использовать скаляр-подселек:

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

Ответ 4

update table_name set (col1,col2,col3) values(col1,col2,col);

Не является стандартным SQL и не работает вы должны использовать это как Гордон Линофф сказал:

update table
    set col1 = expr1,
        col2 = expr2,
        . . .
        coln = exprn
    where some condition

Ответ 5

Это "старое школьное решение", когда команда 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));