Pregunta Actualización SQL de una tabla a otra basada en una coincidencia ID


Tengo una base de datos con account numbers y card numbers. Combino estos con un archivo para update cualquier número de tarjeta al número de cuenta, de modo que solo estoy trabajando con números de cuenta.

Creé una vista que vinculaba la tabla a la base de datos de cuenta / tarjeta para devolver el Table ID y el número de cuenta relacionado, y ahora necesito actualizar esos registros donde el ID coincida con el Número de cuenta.

Este es el Sales_Import mesa, donde el account number el campo necesita ser actualizado:

LeadID  AccountNumber
147         5807811235
150         5807811326
185         7006100100007267039

Y este es el RetrieveAccountNumber tabla, donde necesito actualizar desde:

LeadID  AccountNumber
147         7006100100007266957
150         7006100100007267039

Intenté el siguiente, pero sin suerte hasta el momento:

UPDATE [Sales_Lead].[dbo].[Sales_Import] 
SET    [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber 
                          FROM   RetrieveAccountNumber 
                          WHERE  [Sales_Lead].[dbo].[Sales_Import]. LeadID = 
                                                RetrieveAccountNumber.LeadID) 

Actualiza los números de tarjeta a los números de cuenta, pero los números de cuenta se reemplazan por NULL


742
2017-10-22 07:14


origen


Respuestas:


Yo creo que UPDATE FROM con un JOIN ayudará:

MS SQL

UPDATE
    Sales_Import
SET
    Sales_Import.AccountNumber = RAN.AccountNumber
FROM
    Sales_Import SI
INNER JOIN
    RetrieveAccountNumber RAN
ON 
    SI.LeadID = RAN.LeadID;

MySQL y MariaDB

UPDATE
    Sales_Import SI,
    RetrieveAccountNumber RAN
SET
    SI.AccountNumber = RAN.AccountNumber
WHERE
    SI.LeadID = RAN.LeadID;

1116
2017-10-22 07:19



La forma simple de copiar el contenido de una tabla a otra es la siguiente:

UPDATE table2 
SET table2.col1 = table1.col1, 
table2.col2 = table1.col2,
...
FROM table1, table2 
WHERE table1.memberid = table2.memberid

También puede agregar la condición para obtener los datos particulares copiados.


254
2018-01-20 12:26



Para SQL Server 2008 + Uso MERGE en lugar de la propiedad UPDATE ... FROM la sintaxis tiene cierto atractivo.

Además de ser SQL estándar y por lo tanto más portátil, también generará un error en el caso de que haya múltiples filas unidas en el lado de la fuente (y por lo tanto múltiples valores diferentes posibles para usar en la actualización) en lugar de tener el resultado final indeterminista .

MERGE INTO Sales_Import
   USING RetrieveAccountNumber
      ON Sales_Import.LeadID = RetrieveAccountNumber.LeadID
WHEN MATCHED THEN
   UPDATE 
      SET AccountNumber = RetrieveAccountNumber.AccountNumber;

Desafortunadamente, la elección de cuál usar no puede ser puramente del estilo preferido. La implementación de MERGE en SQL Server ha sido afectado con varios errores. Aaron Bertrand ha compilado una lista de los informados aquí.


143
2018-02-11 15:13



Respuesta genérica para futuros desarrolladores.

servidor SQL

UPDATE 
     t1
SET 
     t1.column = t2.column
FROM 
     Table1 t1 
     INNER JOIN Table2 t2 
     ON t1.id = t2.id;

Oracle (y SQL Server)

UPDATE 
     t1
SET 
     t1.colmun = t2.column 
FROM 
     Table1 t1, 
     Table2 t2 
WHERE 
     t1.ID = t2.ID;

MySQL

UPDATE 
     Table1 t1, 
     Table2 t2
SET 
     t1.column = t2.column 
WHERE
     t1.ID = t2.ID;

39
2017-08-29 17:59



Parece que estás usando MSSQL, entonces, si no recuerdo mal, se hace así:

UPDATE [Sales_Lead].[dbo].[Sales_Import] SET [AccountNumber] = 
RetrieveAccountNumber.AccountNumber 
FROM RetrieveAccountNumber 
WHERE [Sales_Lead].[dbo].[Sales_Import].LeadID = RetrieveAccountNumber.LeadID

32
2017-10-22 07:21



Tuve el mismo problema con foo.new siendo configurado para null para filas de foo que no tenía una tecla correspondiente en bar. Hice algo así en Oracle:

actualización foo
establecer foo.new = (seleccionar bar.new
                  del bar
                  donde foo.key = bar.key)
donde existe (seleccione 1
              del bar
              donde foo.key = bar.key)

28
2018-04-29 18:32



por MySql:

UPDATE table1 JOIN table2 
ON table1.id = table2.id
SET table1.name = table2.name,
table1.`desc` = table2.`desc`

por Servidor SQL:

UPDATE table1
SET table1.name = table2.name,
table1.[desc] = table2.[desc]
FROM table1 JOIN table2 
ON table1.id = table2.id

He utilizado todas las consultas anteriores, pero no están funcionando; y cuando usé este, ya está hecho.

Puedes verlo desde aquí también, https://stackoverflow.com/questions/5036918/update-one-table-with-data-from-another

Espero que lo entiendas Gracias


25
2018-03-29 07:14



Para PostgreSQL:

UPDATE Sales_Import SI
SET AccountNumber = RAN.AccountNumber
FROM RetrieveAccountNumber RAN
WHERE RAN.LeadID = SI.LeadID; 

24
2017-07-16 19:55



Para MySql que funciona bien:

UPDATE
    Sales_Import SI,RetrieveAccountNumber RAN
SET
    SI.AccountNumber = RAN.AccountNumber
WHERE
    SI.LeadID = RAN.LeadID

23
2018-02-13 16:40



Gracias por las respuestas. Encontré una solución.

UPDATE Sales_Import 
SET    AccountNumber = (SELECT RetrieveAccountNumber.AccountNumber 
                          FROM   RetrieveAccountNumber 
                          WHERE  Sales_Import.leadid =RetrieveAccountNumber.LeadID) 
WHERE Sales_Import.leadid = (SELECT  RetrieveAccountNumber.LeadID 
                             FROM   RetrieveAccountNumber 
                             WHERE  Sales_Import.leadid = RetrieveAccountNumber.LeadID)  

12
2017-10-22 08:07