Tengo dos tablas como a continuación.

Tabla A:

        ResultID(PK) | ImportDate | Comment1
        -------------------------------------
        101          | 25-09-2019 | One
        --------------------------------------
        102          | 25-09-2019 | Two
        --------------------------------------
        103          | 25-09-2019 | Three
        ----------------------------------------

Tabla B:

        ResultID(PK) | ImportDate | Comment2
        -------------------------------------
        101          | 26-09-2019 | new one
        --------------------------------------
        104          | 26-09-2019 | four
        --------------------------------------

Entonces la salida debería verse como

Tabla A:

ResultID(PK) | ImportDate | Comment1
-------------------------------------
101          | 26-09-2019 | new one
--------------------------------------
102          | 25-09-2019 | Two
--------------------------------------
103          | 25-09-2019 | Three
--------------------------------------
104          | 26-09-2019 | four
--------------------------------------

Pregunta: Quiero obtener la Tabla A resultante como se mencionó anteriormente si ResultID coincide entre la Tabla A y la Tabla B, quiero actualizar todas las columnas en la Tabla A de la Tabla B para eso ResultID. Si ResultID de la Tabla B no está presente en la Tabla A, insértelo en la Tabla A.

Lo que probé en MySQL:

UPDATE TableA 
SET comment1=
(SELECT comment2 FROM TableB WHERE TableA.ResultId=TableB.ResultId);

La solución anterior solo funciona para una columna para actualizar la Tabla A.También probé con la referencia de actualización de múltiples columnas de Implementación de SQL Server 2005 de MySQL REPLACE INTO? pero con varias columnas la actualización no funciona para mis escenarios.

Para mis escenarios reales, tengo 40 columnas y 50,000 filas.

¿Podría darme alguna pista o solución? Gracias.

0
Jay 26 sep. 2019 a las 04:33

1 respuesta

La mejor respuesta

Como tiene una clave principal en ResultID, simplemente puede usar una consulta INSERT ... ON DUPLICATE KEY UPDATE para transferir todos los datos de TableB a TableA:

INSERT INTO TableA (ResultID, ImportDate, Comment1)
SELECT ResultID, ImportDate, Comment2 FROM TableB
ON DUPLICATE KEY UPDATE
  ImportDate = VALUES(ImportDate),
  Comment1 = VALUES(Comment1);

Salida:

ResultID    ImportDate  Comment1
101         26-09-2019  new one
102         25-09-2019  Two
103         25-09-2019  Three
104         26-09-2019  four

Demostración sobre dbfiddle

1
Nick 26 sep. 2019 a las 01:45