sql - sentencia - update db2 con 2 tablas
Cómo actualizar varias columnas en una sola declaración de actualización en DB2 (4)
Quiero actualizar varias columnas de una tabla en DB2 con una única declaración de Actualización.
Cualquier pista o idea será apreciable. Gracias.
La declaración de actualización en todas las versiones de SQL se ve así:
update table
set col1 = expr1,
col2 = expr2,
. . .
coln = exprn
where some condition
Entonces, la respuesta es que separa las asignaciones usando comas y no repite la declaración set
.
Si los valores provienen de otra tabla, es posible que desee utilizar
UPDATE table1 t1
SET (col1, col2) = (
SELECT col3, col4
FROM table2 t2
WHERE t1.col8=t2.col9
)
Ejemplo:
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);
No es un SQL estándar y no funciona, tienes que usar esto como dijo Gordon Linoff :
update table
set col1 = expr1,
col2 = expr2,
. . .
coln = exprn
where some condition
Sé que es una vieja pregunta, pero solo tenía que encontrar la solución para la actualización de múltiples filas donde varios registros tenían que actualizarse con diferentes valores basados en sus ID y descubrí que puedo usar una subselección escalar:
UPDATE PROJECT
SET DEPTNO =
(SELECT WORKDEPT FROM EMPLOYEE
WHERE PROJECT.RESPEMP = EMPLOYEE.EMPNO)
WHERE RESPEMP=''000030''
(con WHERE opcional, por supuesto)
Además, descubrí que es fundamental especificar que no se usarán valores NULL en esta actualización (en caso de que no todos los registros en la primera tabla tengan el registro correspondiente en la segunda), de esta manera:
UPDATE PROJECT
SET DEPTNO =
(SELECT WORKDEPT FROM EMPLOYEE
WHERE PROJECT.RESPEMP = EMPLOYEE.EMPNO)
WHERE RESPEMP IN (SELECT EMPNO FROM EMPLOYEE)
Fuente: https://www.ibm.com/support/knowledgecenter/ssw_i5_54/sqlp/rbafyupdatesub.htm