Cómo actualizar una tabla desde otra tabla


28

Tengo una tabla A tiene columna (id, campo_1, campo_2), y otra tabla B tiene columna (id, campo_2)

Ahora quiero fusionar la tabla B a A, eso significa que quiero actualizar field_2 en la tabla A al valor de la tabla B. Entonces, ¿cómo implementar eso? Por cierto estoy usando Oracle

Gracias


¿Ambas tablas contienen el mismo número de registros?
ujjwalesri

Respuestas:


29

Un enfoque alternativo a la subconsulta correlacionada (sugerida por Kerri) sería utilizar la declaración MERGE, que podría ser más eficiente que la subselección (que solo puede verificarse mirando el plan de ejecución de ambas declaraciones).

MERGE INTO table_b 
USING 
(
  SELECT id,
         field_2
  FROM table_a
) ta ON (ta.id = table_b.id)
WHEN MATCHED THEN UPDATE 
    SET table_b.field_2 = ta.field_2

2
La única restricción a la MERGEdeclaración es que no puede actualizar la columna en la que está unida, es decir, no puede actualizar la columna utilizada en la ONcláusula.
Lalit Kumar B

Esto funcionó para mí, actualizó 2.5 millones de filas en lugar de intentar el método de subconsulta que se ejecutó durante unos 45 minutos antes de error conORA-01555: snapshot too old
helmy

15

No estoy exactamente seguro de lo que está buscando en este caso, pero esto debería funcionar como algo único o continuo a través de un trabajo programado:

UPDATE table_a a
   SET field_2 = ( SELECT field_2
                     FROM table_b b
                    WHERE b.id = a.id )
;

Ahora, cada vez que se ejecuta lo anterior, lo hará en todas las filas de la tabla. Si esto es algo que necesita hacer todo el tiempo, sugeriría algo más, pero para tablas únicas o muy pequeñas debería ser suficiente.


2

He hecho esto con éxito usando una tabla en user1 de otra tabla en user2:

update user1.table1 a
set a.field1 = (
  select b.field1
  from user2.table2 b
  where a.field1=b.field1
)
where <condition for update user1.table1>

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.