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

21voto

Falls die Tabellen in verschiedenen Datenbanken liegen. (MSSQL)

update database1..Ciudad
set CiudadDistrito=c2.CiudadDistrito

FROM database1..Ciudad c1
 inner join 
  database2..Ciudad c2 on c2.CiudadID=c1.CiudadID

16voto

saman samadi Punkte 187

MS Sql

UPDATE  c4 SET Price=cp.Price*p.FactorRate FROM TableNamea_A c4
inner join TableNamea_B p on c4.Calcid=p.calcid 
inner join TableNamea_A cp on c4.Calcid=cp.calcid 
WHERE c4..Name='MyName';

Oracle 11g

        MERGE INTO  TableNamea_A u 
        using
        (
                SELECT c4.TableName_A_ID,(cp.Price*p.FactorRate) as CalcTot 
                FROM TableNamea_A c4
                inner join TableNamea_B p on c4.Calcid=p.calcid 
                inner join TableNamea_A cp on c4.Calcid=cp.calcid 
                WHERE p.Name='MyName' 
        )  rt
        on (u.TableNamea_A_ID=rt.TableNamea_B_ID)
        WHEN MATCHED THEN
        Update set Price=CalcTot  ;

16voto

Gil Baggio Punkte 10839

Verwenden Sie den folgenden Abfrageblock, um Tabelle1 basierend auf der ID mit Tabelle2 zu aktualisieren:

UPDATE Sales_Import, RetrieveAccountNumber 
SET Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber 
where Sales_Import.LeadID = RetrieveAccountNumber.LeadID;

Dies ist der einfachste Weg, um dieses Problem anzugehen.

9voto

Shilwant Gupta Punkte 119

Aktualisierung von einer Tabelle auf eine andere Tabelle, wenn die IDs übereinstimmen

UPDATE 
     TABLE1 t1, 
     TABLE2 t2
SET 
     t1.column_name = t2.column_name 
WHERE
     t1.id = t2.id;

8voto

Dr Inner Join Punkte 87

Der unten stehende SQL, den jemand vorgeschlagen hat, funktioniert NICHT in SQL Server. Diese Syntax erinnert mich an meine alte Schulklasse:

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

Alle anderen Abfragen, die NOT IN oder NOT EXISTS verwenden, werden nicht empfohlen. NULLs tauchen auf, weil der OP den gesamten Datensatz mit einem kleineren Unterdatensatz vergleicht, und dann tritt natürlich ein Anpassungsproblem auf. Dies muss durch das Schreiben eines ordentlichen SQL mit dem richtigen JOIN anstelle des Ausweichens des Problems mit NOT IN behoben werden. Sie könnten in diesem Fall auf andere Probleme stoßen, wenn Sie NOT IN oder NOT EXISTS verwenden.

Meine Stimme für den oberen, konventionellen Weg, eine Tabelle in SQL Server basierend auf einer anderen Tabelle durch einen Join zu aktualisieren. Wie gesagt, Sie können in SQL Server zwei Tabellen nicht im selben UPDATE-Statement verwenden, es sei denn, Sie verbinden sie zuerst.

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