Frage SQL-Aktualisierung von einer Tabelle zu einer anderen basierend auf einer ID-Übereinstimmung


Ich habe eine Datenbank mit account numbers und card numbers. Ich vergleiche diese mit einer Datei zu update irgendwelche Kartennummern auf die Kontonummer, so dass ich nur mit Kontonummern arbeite.

Ich habe eine Ansicht erstellt, die die Tabelle mit der Konto- / Kartendatenbank verbindet, um die Table ID und die zugehörige Kontonummer, und jetzt muss ich die Datensätze aktualisieren, in denen die ID mit der Kontonummer übereinstimmt.

Dies ist das Sales_Import Tabelle, wo die account number Feld muss aktualisiert werden:

LeadID  AccountNumber
147         5807811235
150         5807811326
185         7006100100007267039

Und das ist das RetrieveAccountNumber Tabelle, wo ich aktualisieren muss von:

LeadID  AccountNumber
147         7006100100007266957
150         7006100100007267039

Ich habe versucht das unten, aber bisher kein Glück:

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

Es aktualisiert die Kartennummern auf Kontonummern, aber die Kontonummern werden durch ersetzt NULL


742
2017-10-22 07:14


Ursprung


Antworten:


Ich glaube ein UPDATE FROM mit einem JOIN wird helfen:

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 und MariaDB

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

1116
2017-10-22 07:19



Die einfache Möglichkeit, den Inhalt von einer Tabelle in eine andere zu kopieren, ist wie folgt:

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

Sie können auch die Bedingung hinzufügen, um die bestimmten Daten zu kopieren.


254
2018-01-20 12:26



Für SQL Server 2008 + Verwenden MERGE eher als das Eigene UPDATE ... FROM Syntax hat etwas Anziehungskraft.

Es ist nicht nur Standard-SQL und daher portabler, es wird auch einen Fehler auslösen, wenn auf der Quellseite mehrere verbundene Zeilen vorhanden sind (und somit mehrere mögliche unterschiedliche Werte für die Aktualisierung), anstatt dass das Endergebnis unbestimmbar ist .

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

Leider kann die Auswahl, die zu verwenden ist, jedoch nicht auf den bevorzugten Stil zurückgeführt werden. Die Implementierung von MERGE in SQL Server wurde mit verschiedenen Fehlern behaftet. Aaron Bertrand hat eine Liste zusammengestellt von die berichteten hier.


143
2018-02-11 15:13



Generische Antwort für zukünftige Entwickler.

SQL Server

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

Oracle (und 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



Scheint, dass Sie MSSQL verwenden, dann, wenn ich mich richtig erinnere, wird es so gemacht:

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



Ich hatte das gleiche Problem mit foo.new eingestellt werden null für Reihen von foo das hatte keinen übereinstimmenden Schlüssel bar. Ich habe so etwas in Oracle gemacht:

Aktualisieren Sie foo
setze foo.new = (wähle bar.new aus
                  von der Bar
                  wo foo.key = bar.key)
Wo existiert (wählen Sie 1
              von der Bar
              wo foo.key = bar.key)

28
2018-04-29 18:32



Zum MySql:

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

Zum SQL Server:

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

Ich habe alle obigen Abfragen verwendet, aber sie funktionieren nicht. und als ich diesen benutzt habe, ist es fertig.

Sie können es von hier auch fangen, https://stackoverflow.com/questions/5036918/update-one-table-with-data-from-another

Hoffe du bekommst es. Vielen Dank


25
2018-03-29 07:14



Für PostgreSQL:

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

24
2017-07-16 19:55



Für MySql, das funktioniert gut:

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

23
2018-02-13 16:40



Danke für die Antworten. Ich habe eine Lösung gefunden.

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