1164 Stimmen

SQL Update von einer Tabelle zur anderen basierend auf einer ID-Übereinstimmung

Ich habe eine Datenbank mit Kontonummern und Kartennummern. Ich gleiche diese mit einer Datei ab, um alle Kartennummern auf die Kontonummer zu aktualisieren, damit ich nur mit Kontonummern arbeite.

Ich habe eine Ansicht erstellt, die die Tabelle mit der Konto-/Kartendatenbank verknüpft, um die Tabellen-ID und die zugehörige Kontonummer zurückzugeben, und jetzt muss ich diese Datensätze aktualisieren, bei denen die ID mit der Kontonummer übereinstimmt.

Das ist die Tabelle Sales_Import, in der das Feld Kontonummer aktualisiert werden muss:

LeadID

Kontonummer

147

5807811235

150

5807811326

185

7006100100007267039

Und das ist die Tabelle RetrieveAccountNumber, von der ich aktualisieren muss:

LeadID

Kontonummer

147

7006100100007266957

150

7006100100007267039

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

UPDATE [Sales_Lead].[dbo].[Sales_Import] 
SET    [Kontonummer] = (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 NULL ersetzt

1652voto

Mark S. Rasmussen Punkte 33348

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;

336voto

Shivkant Punkte 4289

Der einfache Weg, 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 bestimmte Daten kopieren zu lassen.

170voto

Martin Smith Punkte 417623

Für SQL Server 2008 + ist die Verwendung von MERGE anstelle der eigenen Syntax UPDATE ... FROM etwas ansprechend.

Neben der Standard-SQL und somit portableren ist es auch fehleranfällig, wenn auf der Quellseite mehrere zusammengeführte Zeilen vorhanden sind (und somit mehrere mögliche unterschiedliche Werte für das Update vorhanden sind) anstatt das Endergebnis unbestimmt zu lassen.

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

Leider kann die Wahl, welche heranzuziehen ist, jedoch nicht ausschließlich auf den bevorzugten Stil zurückzuführen sein. Die Implementierung von MERGE in SQL Server war von verschiedenen Fehlern betroffen. Aaron Bertrand hat eine Liste der hier gemeldeten zusammengestellt.

152voto

Tigerjz32 Punkte 3918

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;

67voto

petter Punkte 1543

Für PostgreSQL:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X