Ich möchte mehrere Spalten einer Tabelle in DB2 mit einer einzigen Aktualisierungsanweisung aktualisieren.
Jeder Hinweis oder Idee wird spürbar sein. Vielen Dank.
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.
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;
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
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
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));