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

0voto

pacreely Punkte 1771

Ich möchte gerne noch eine Sache hinzufügen.

Aktualisieren Sie keinen Wert mit dem gleichen Wert, da zusätzliches Logging und unnötiger Overhead erzeugt wird. Siehe untenstehendes Beispiel - es wird das Update nur für 2 Datensätze durchführen, obwohl es eine Verknüpfung zu 3 gibt.

DROP TABLE #TMP1
DROP TABLE #TMP2
CREATE TABLE #TMP1(LeadID Int,AccountNumber NVarchar(50))
CREATE TABLE #TMP2(LeadID Int,AccountNumber NVarchar(50))

INSERT INTO #TMP1 VALUES
(147,'5807811235')
,(150,'5807811326')
,(185,'7006100100007267039');

INSERT INTO #TMP2 VALUES
(147,'7006100100007266957')
,(150,'7006100100007267039')
,(185,'7006100100007267039');

UPDATE A
SET A.AccountNumber = B.AccountNumber
FROM
    #TMP1 A 
        INNER JOIN #TMP2 B
        ON
        A.LeadID = B.LeadID
WHERE
    A.AccountNumber <> B.AccountNumber  --ÜBERSCHREIBEN SIE EINEN WERT NICHT MIT DEM GLEICHEN WERT

SELECT * FROM #TMP1

0voto

Cuado Punkte 130

ORACLE

verwenden

UPDATE lieferanten
SET lieferantenname = (SELECT kunden.kundenname
                     FROM kunden
                     WHERE kunden.kunden_id = lieferanten.lieferanten_id)
WHERE EXISTS (SELECT kunden.kundenname
              FROM kunden
              WHERE kunden.kunden_id = lieferanten.lieferanten_id);

0voto

ankit giri Punkte 338

UPDATE table1 dpm SET col1 = dpu.col1 FROM table2 dpu WHERE dpm.parameter_master_id = dpu.parameter_master_id;

-3voto

Shaw Punkte 41

Wenn die obigen Antworten nicht für Sie funktionieren, versuchen Sie es mit diesem

Aktualisieren Sie Sales_Import A left join RetrieveAccountNumber B on A.LeadID = B.LeadID
Set A.AccountNumber = B.AccountNumber
where A.LeadID = B.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