8 Stimmen

Update table a from table b where (Bedingungen)

Guten Abend zusammen,

Eigentlich ist es Nacht. Ungefähr 23 Uhr. Mein Gehirn schaltet sich ab und ich brauche ein bisschen Hilfe, damit ich fertig werde 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 :(

Im Grunde genommen möchte ich Folgendes 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 glaube, das ist es, was ich tun möchte...

Kann mir jemand weiterhelfen, bitte?

13voto

Nick Craver Punkte 609016

Sie können dies über einen Join in der Aktualisierung tun:

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

4voto

OMG Ponies Punkte 312816

Verwendung:

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

SQL Server unterstützt keine Tabellen-Aliase für die zu aktualisierende Tabelle, aber die obige Abfrage ist eine korrelierte Abfrage - die Felder ohne den Tabellen-Alias b beigefügt sind, dienen Werte aus TABLE_A weil es keinen Alias hat.

Das einzige darüber hinausgehende Problem ist, wenn es mehrere b.importantfield Werte für Datensätze mit den übereinstimmenden Datensätzen in TABLE_A. Verwenden:

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

aber Sie sollten eine ORDER BY oder Sie erhalten eine beliebige b.importantfield Wert.

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