2010-01-28 9 views
7

Abend alle,Update Tabelle a aus Tabelle b wo (Bedingungen)

Eigentlich ist es Nacht. Gegen 23 Uhr. Mein Gehirn ist heruntergefahren und ich brauche ein bisschen Hilfe, damit ich fertig bin und nach Hause gehen kann.

Ich habe zwei Tabellen - Tabelle a und Tabelle b. Ich muss ein Feld in Tabelle a mit dem Wert aus einem Feld in Tabelle b aktualisieren, wenn zwei andere Felder übereinstimmen. Die Tabellen haben keine eindeutige ID für jeden Datensatz :(

Grundsätzlich möchte ich dies tun:

update a 
set importantField = 
(select b.importantfield 
from b 
where a.matchfield = b.matchfield 
and a.matchfield2 = b.matchfield2 
) 
where a.matchfield = b.matchfield 
and a.matchfield2 = b.matchfield2 

Oder zumindest ... Ich denke, das ist, was ich tun will ...

kann jemand mir helfen, bitte

Antwort

11

Sie dies über eine in dem Update verbinden kann:?

Update a 
Set a.importantField = b.importantField 
From a Join b 
    On a.matchfield = b.matchfield 
    And a.matchfield2 = b.matchfield2 
+1

Sie, Sir, sind ein Genie. ... und ich bin wirklich müde, nicht daran zu denken, einen Beitritt zu machen ... Ich kann jetzt nach Hause gehen und es ist alles dank dir! Geben Sie sich einen Klaps auf die Rückseite: D –

+0

@Cosmic: Froh, es funktioniert für Sie ... Ich musste überprüfen, dass dies funktionierte, verbrachte zu viel Zeit in LINQ in letzter Zeit :) –

+0

Ich denke, Sie müssen ein Alias ​​für 'a setzen 'Tabelle, damit das funktioniert, oder fehlt mir etwas? –

3

Verwenden :

UPDATE TABLE_A 
    SET importantField = (SELECT b.importantfield 
          FROM TABLE_B b 
          WHERE b.matchfield = matchfield 
          AND b.matchfield2 = matchfield2) 

SQL Server nicht Tabellenaliasse auf dem Tisch wird aktualisiert unterstützen, aber die oben ist eine korrelierte Abfrage - diese Felder ohne die Tabelle alias b angebracht werden Werte von TABLE_A dienen, weil es kein hat alias.

Das einzige Problem darüber hinaus ist, wenn es mehrere b.importantfield Werte für Datensätze mit den übereinstimmenden Datensätzen zu TABLE_A gibt. Verwendung:

UPDATE TABLE_A 
    SET importantField = (SELECT TOP 1 
           b.importantfield 
          FROM TABLE_B b 
          WHERE b.matchfield = matchfield 
          AND b.matchfield2 = matchfield2) 

..aber sollten Sie eine ORDER BY auch verwenden, oder Sie werden einen beliebigen b.importantfield Wert.

+0

Vielen Dank, dass Sie sich die Zeit genommen haben, mir eine Antwort zu schreiben. Ich habe deine Lösung am Ende nicht benutzt, aber ich möchte dir trotzdem dafür danken. Also vielen Dank :) –

Verwandte Themen