UPDATE

UPDATE con JOIN en SQLServer

Supongamos que queremos actualizar en nuestra bbdd SQLServer el campo de costes de la tabla de hechos FAC_TABLE con el coste unitario de nuestra tabla de COSTES.

 

update FAC_TABLE set COSTE_UNITARIO =ct.COSTE_UNITARIO
from COSTES ct
where  FAC_TABLE.id_articulo = ct.id_articulo

 

Algo más sencillo que en Oracle.

 

Espero que os ayude.

Héctor Minguet.

UPDATE con JOIN en ORACLE

Supongamos que queremos actualizar en nuestra bbdd ORACLE el campo de costes de la tabla de hechos FAC_TABLE con el coste unitario de nuestra tabla de COSTES.

Podemos hacerlo de dos maneras:

1. (Lenta, pero si es para pocos datos o para lanzarlo esporádicamente nos puede valer)

update FAC_TABLE ft
set COSTE_UNITARIO = (select distinct COSTE_UNITARIO  from COSTES ct 
 where (ft.id_articulo = ct.id_articulo);

2. (la mejor manera es esta, y el rendimimento es óptimo si tiene constraints)

UPDATE (
 SELECT 
   ft.COSTE_UNITARIO AS old_coste,
   ct.COSTE_UNITARIO AS new_coste
 FROM FAC_TABLE ft
 INNER JOIN COSTES ct ON ft.id_articulo = ct.id_articulo)
)
SET old_coste = new_coste;

Para que esta segunda oción funcione necesitamos tener UNIQUE or PRIMARY KEY constraint en ct.id_articulo.
Si no tienes esta constraint, puedes utilizar el hint /*+BYPASS_UJVC*/ después de la palabra UPDATE
(bypass update join view constraint). El rendimiento aumenta si tenemos la constraint pero aún sin ella debe correr mucho más que la primera opción.

Espero que os ayude.

Héctor Minguet.

Busqueda con el motor de Google

Google
 
 
 
 
Distribuir contenido