viernes, 21 de enero de 2011

ORACLE y UPDATE con varias tablas

hay situaciones en las que tienes que actualizar el valor del campo de una tabla, con el valor de una consulta (mediante una relación 1 a 1).

La primera manera es:
UPDATE tablaA set
campoA1 = (
select distinct campoB1
from tablaB
where tablaB.campoBi = tablaA.campoAi
)
...

una forma eficiente más eficiente es la siguiente:

UPDATE (
SELECT
tablaA.campoA1,
tablaB.campoB1
FROM tablaA
INNER JOIN tablaB on tablaB.campoBi = tablaA.campoAi)
)
SET campoA1 = campoB1;

Para que esta segunda opción funcione necesitamos tener UNIQUE or PRIMARY KEY constraint en la relación entre tablas.

Si no tienes esta constraint, puedes utilizar el hint /*+BYPASS_UJVC*/ después de la palabra UPDATE
(bypass update join view constraint).

No hay comentarios: