La documentación de referencia para the UPDATE statement en DB2 LUW 9.7 da el siguiente ejemplo:
UPDATE (SELECT EMPNO, SALARY, COMM,
AVG(SALARY) OVER (PARTITION BY WORKDEPT),
AVG(COMM) OVER (PARTITION BY WORKDEPT)
FROM EMPLOYEE E) AS E(EMPNO, SALARY, COMM, AVGSAL, AVGCOMM)
SET (SALARY, COMM) = (AVGSAL, AVGCOMM)
WHERE EMPNO = '000120'
Los paréntesis después de la actualización pueden contener una selección completa, es decir, cualquier instrucción SELECT válida puede ir allí.
Sobre la base de que, sugeriría lo siguiente:
UPDATE (
SELECT
f1.firstfield,
f2.anotherfield,
f2.something
FROM file1 f1
WHERE f1.firstfield like 'BLAH%'
INNER JOIN file2 f2
ON substr(f1.firstfield,10,20) = substr(f2.anotherfield,1,10)
)
AS my_files(firstfield, anotherfield, something)
SET
firstfield = ('BIT OF TEXT' || something)
Edición: Ian es correcto. Mi primer instinto fue probar subselects en su lugar:
UPDATE file1 f1
SET f1.firstfield = ('BIT OF TEXT' || (
SELECT f2.something
FROM file2 f2
WHERE substr(f1.firstfield,10,20) = substr(f2.anotherfield,1,10)
))
WHERE f1.firstfield LIKE 'BLAH%'
AND substr(f1.firstfield,10,20) IN (
SELECT substr(f2.anotherfield,1,10)
FROM file2 f2
)
Pero no estoy seguro de si la concatenación funcionaría. También supone que hay una correspondencia 1: 1 entre las subcadenas. Si hay varias filas que coinciden, no funcionaría.
Gracias ConcernedOfTunbridge - lamentablemente esto no funciona en DB2, me sale un error que dice "calificador de columna o de la tabla B indefinido" – Hamish
Cualquier otro ideas? – Hamish
has intentado || en lugar de +, y desea escribir inner join en lugar de 'join' - creo que la función substr debe ser '10, 10 'no '10, 20' ver http://publib.boulder.ibm.com/infocenter/ db2luw/v8/index.jsp? topic =/com.ibm.db2.udb.doc/admin/r0000854.htm –