Ich muss ein Feld mit einem Wert aktualisieren, der durch einen Join von 3 Tabellen zurückgegeben wird.
Beispiel:
select
im.itemid
,im.sku as iSku
,gm.SKU as GSKU
,mm.ManufacturerId as ManuId
,mm.ManufacturerName
,im.mf_item_number
,mm.ManufacturerID
from
item_master im, group_master gm, Manufacturer_Master mm
where
im.mf_item_number like 'STA%'
and im.sku=gm.sku
and gm.ManufacturerID = mm.ManufacturerID
and gm.manufacturerID=34
Ich möchte die mf_item_number
Feldwerte der Tabelle item_master
mit einem anderen Wert aktualisieren, der in der obigen Bedingung verbunden ist.
Wie kann ich das in MS SQL Server tun?
Antworten:
Zur Verdeutlichung ... Die
UPDATE
Klausel kann auf einen in derFROM
Klausel angegebenen Tabellenalias verweisen . Alsoim
in diesem Fall gilt ,Allgemeines Beispiel
quelle
UPDATE im
;Eine der einfachsten Möglichkeiten ist die Verwendung eines allgemeinen Tabellenausdrucks (da Sie bereits mit SQL 2005 arbeiten):
Die Abfrageausführungs-Engine wird selbst herausfinden, wie der Datensatz aktualisiert wird.
quelle
Anpassung an MySQL - es gibt keine
FROM
KlauselUPDATE
, aber das funktioniert:quelle
Ich habe Ihr SQL oben nicht verwendet, aber hier ist ein Beispiel für die Aktualisierung einer Tabelle basierend auf einer Join-Anweisung.
quelle
Sie können zusätzliche Tabellen angeben, anhand derer bestimmt wird, wie und was mit der FROM-Klausel in der UPDATE-Anweisung aktualisiert werden soll:
In der WHERE-Klausel müssen Sie die Bedingungen und Verknüpfungsoperationen angeben, um diese Tabellen miteinander zu verbinden.
Marc
quelle
MySQL: Nehmen Sie im Allgemeinen die erforderlichen Änderungen an Ihren Anforderungen vor:
quelle
Versuchen Sie es so ...
quelle
Sie können die folgende Abfrage verwenden:
quelle
Sie können mit
MERGE
Command mit viel mehr Kontrolle überMATCHED
und aktualisierenNOT MATCHED
: (Ich habe den Quellcode leicht geändert, um meinen Standpunkt zu demonstrieren.)quelle