wake-up-neo.net

So aktualisieren Sie mehrere Spalten in einer einzigen Aktualisierungsanweisung in DB2

Ich möchte mehrere Spalten einer Tabelle in DB2 mit einer einzigen Aktualisierungsanweisung aktualisieren. 

Jeder Hinweis oder Idee wird spürbar sein. Vielen Dank.

15
Superman

Die Update-Anweisung in allen SQL-Versionen sieht folgendermaßen aus:

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

Die Antwort lautet also, dass Sie die Zuweisungen mit Kommas trennen und die set-Anweisung nicht wiederholen.

33
Gordon Linoff

Wenn die Werte aus einer anderen Tabelle stammen, möchten Sie möglicherweise __ verwenden

 UPDATE table1 t1 
 SET (col1, col2) = (
      SELECT col3, col4 
      FROM  table2 t2 
      WHERE t1.col8=t2.col9
 )

Beispiel:

UPDATE table1
SET (col1, col2, col3) =(
   (SELECT MIN (ship_charge), MAX (ship_charge) FROM orders), 
   '07/01/2007'
)
WHERE col4 = 1001;
5
update table_name set (col1,col2,col3) values(col1,col2,col);

Ist nicht Standard-SQL und funktioniert nichtSie haben das verwendet, als Gordon Linoff sagte:

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

Ich weiß, dass es eine alte Frage ist, aber ich musste nur nach einer Lösung für mehrere Zeilen suchen, bei der mehrere Datensätze mit unterschiedlichen Werten basierend auf ihren IDs aktualisiert wurden.

UPDATE PROJECT
  SET DEPTNO =
        (SELECT WORKDEPT FROM EMPLOYEE
           WHERE PROJECT.RESPEMP = EMPLOYEE.EMPNO)
  WHERE RESPEMP='000030'

(mit WHERE optional, natürlich)

Ich habe auch festgestellt, dass es wichtig ist anzugeben, dass in dieser Aktualisierung keine NULL-Werte verwendet werden (falls nicht alle Datensätze in der ersten Tabelle über einen entsprechenden Datensatz in der zweiten Tabelle verfügen).

UPDATE PROJECT
  SET DEPTNO =
        (SELECT WORKDEPT FROM EMPLOYEE
           WHERE PROJECT.RESPEMP = EMPLOYEE.EMPNO)
  WHERE RESPEMP IN (SELECT EMPNO FROM EMPLOYEE)

Quelle: https://www.ibm.com/support/knowledgecenter/ssw_i5_54/sqlp/rbafyupdatesub.htm

0
InitK

Dies ist eine "Old-School-Lösung", wenn der Befehl MERGE nicht funktioniert (ich denke vor Version 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));
0
Hennie van Dyk