Je dois mettre à jour un champ avec une valeur qui est retournée par une jointure de 3 tables.
Exemple:
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
Je veux mettre à jour les mf_item_number
valeurs de champ de la table item_master
avec une autre valeur qui est jointe dans la condition ci-dessus.
Comment puis-je faire cela dans MS SQL Server?
Réponses:
Pour être clair ... La
UPDATE
clause peut faire référence à un alias de table spécifié dans laFROM
clause. Donc,im
dans ce cas, est valideExemple générique
la source
UPDATE im
; im est un alias que Postgres ne reconnaît pas: /L'un des moyens les plus simples consiste à utiliser une expression de table commune (puisque vous êtes déjà sur SQL 2005):
Le moteur d'exécution des requêtes trouvera par lui-même comment mettre à jour l'enregistrement.
la source
L'adaptation à MySQL - il n'y a pas de
FROM
clauseUPDATE
, mais cela fonctionne:la source
N'a pas utilisé votre sql ci-dessus mais voici un exemple de mise à jour d'une table basée sur une instruction join.
la source
Vous pouvez spécifier des tables supplémentaires utilisées pour déterminer comment et quoi mettre à jour avec la clause "FROM" dans l'instruction UPDATE, comme ceci:
Dans la clause WHERE, vous devez fournir les conditions et les opérations de jointure pour lier ces tables entre elles.
Marc
la source
MySQL: En général, faites les changements nécessaires selon vos besoins:
la source
Essayez comme ça ...
la source
Vous pouvez utiliser la requête suivante:
la source
Vous pouvez mettre à jour avec
MERGE
Command avec beaucoup plus de contrôleMATCHED
etNOT MATCHED
: (J'ai légèrement changé le code source pour démontrer mon point)la source