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

2voto

Developer Punkte 380

probieren Sie dies aus:

UPDATE
    Table_A
SET
    Table_A.AccountNumber = Table_B.AccountNumber ,
FROM
    dbo.Sales_Import AS Table_A
    INNER JOIN dbo.RetrieveAccountNumber AS Table_B
        ON Table_A.LeadID = Table_B.LeadID 
WHERE
    Table_A.LeadID = Table_B.LeadID

2voto

CG_DEV Punkte 688

Dies ermöglicht es Ihnen, eine Tabelle basierend auf dem Spaltenwert zu aktualisieren, der in einer anderen Tabelle nicht gefunden wird.

UPDATE table1 SET table1.column = 'some_new_val' WHERE table1.id IN (
        SELECT * 
        FROM (
                SELECT table1.id
                FROM  table1 
                LEFT JOIN table2 ON ( table2.column = table1.column ) 
                WHERE table1.column = 'some_expected_val'
                AND table12.column IS NULL
        ) AS Xalias
)

Dies wird eine Tabelle basierend auf dem Spaltenwert aktualisieren, der in beiden Tabellen gefunden wird.

UPDATE table1 SET table1.column = 'some_new_val' WHERE table1.id IN (
        SELECT * 
        FROM (
                SELECT table1.id
                FROM  table1 
                JOIN table2 ON ( table2.column = table1.column ) 
                WHERE table1.column = 'some_expected_val'
        ) AS Xalias
)

2voto

user824910 Punkte 1027

Ich dachte, dies ist ein einfaches Beispiel, das es jemandem leichter macht,

        DECLARE @TB1 TABELLE
        (
            Nr Int
            ,Name NVarchar(50)
        )

        DECLARE @TB2 TABELLE
        (
            Nr Int
            ,Name NVarchar(50)
        )

        INSERT INTO @TB1 VALUES(1,'asdf');
        INSERT INTO @TB1 VALUES(2,'awerq');

        INSERT INTO @TB2 VALUES(1,';oiup');
        INSERT INTO @TB2 VALUES(2,'lkjhj');

        SELECT * FROM @TB1

        UPDATE @TB1 SET Name =S.Name
        FROM @TB1 T
        INNER JOIN @TB2 S
                ON S.Nr = T.Nr

        SELECT * FROM @TB1

1voto

Bruno Punkte 37

Oracle 11g

zusammenführen in Sales_Import
verwenden RetrieveAccountNumber
auf (Sales_Import.LeadId = RetrieveAccountNumber.LeadId)
wenn Übereinstimmung dann aktualisieren setzen Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber;

1voto

Pasindu Perera Punkte 119

Für Oracle SQL versuchen Sie, Alias zu verwenden

UPDATE Sales_Lead.dbo.Sales_Import SI 
SET SI.AccountNumber = (SELECT 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