En ocasiones podemos necesitar que en una columna de una tabla se encuentren los mismos datos que se encuentran en una columna de otra tabla.

En Firebird el comando UPDATE no soporta la cláusula JOIN. Así que algo como esto no es posible hacer:

Listado 1.

UPDATE
   Tabla1 T1
JOIN
   Tabla2 T2
   ON T1.Columna1 = T2.Columna2
SET
   T1.Columna3 = T2.Columna4

Sin embargo, esto sí podemos hacer:

Listado 2.

UPDATE
   Tabla1 T1
SET
   T1.Columna3 = (SELECT T2.Columna4 FROM Tabla2 T2 WHERE T1.Columna1 = T2.Columna2 ROWS 1)

El SELECT devolverá a una sola fila y a una sola columna de esa fila. O sea, en otras palabras, obtendremos un único valor. Nos aseguramos que devuelva una sola fila al escribir ROWS 1 y devuelve una sola columna porque en el SELECT se escribió una sola columna. Es por lo tanto perfectamente válido lo que hemos hecho.

Desde luego que dentro del SELECT sí podemos usar JOIN y no solamente a una, sino a varias tablas, no hay problemas con eso. También podemos usar las cláusulas GROUP BY, HAVING, ORDER BY, etc.

De esta manera, aunque el comando UPDATE no soporta la cláusula JOIN hemos obtenido el mismo resultado que si la soportara.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21