2010-11-10 13 views
3

Je veux effectuer une mise à jour de SQLComment puis-je mettre à jour lorsqu'une condition de sélection donnée renvoie une valeur vraie?

UPDATE incCustomer SET etaxCode = 'HST' WHERE 

uniquement sur les enregistrements où cela est vrai.

select etaxCode 
from incCustomer 
left join incAddress on incCustomer.iAddressId = incAddress.iId 
left join incProvince on incAddress.iProvinceStateId = incProvince.iId 
where incAddress.iProvinceStateId in ( 2 ,  3 ,  4 , 6 , 9) 

Je ne pense pas que ce soit possible avec ANSI SQL, mais peut-il être fait en MySQL?

Répondre

4

MySQL UPDATE syntax prend en charge les jointures dans les deux syntaxes ANSI-89 et ANSI-92.

Utilisation:

UPDATE INCCUSTOMER c 
LEFT JOIN INCADDRESS a ON a.iid = c.iaddressid 
LEFT JOIN INCPROVINCE p ON p.iid = a.iprovincestateid 
     SET c.etaxcode = 'HST' 
    WHERE a.iProvinceStateId IN (2,3,4,6,9) 

Je ne vois pas le point de gauche qui rejoint à la table de la province - Je pense que votre mise à jour pourrait être écrit:

UPDATE INCCUSTOMER 
     SET c.etaxcode = 'HST' 
    WHERE EXISTS(SELECT NULL 
        FROM INCADDRESS a 
        WHERE a.iid = INCCUSTOMER.iaddressid 
        AND a.iProvinceStateId IN (2,3,4,6,9)) 
+0

Bien que je tiens à souligner que OUTER les jointures dans ANSI-89 nécessitent une syntaxe spécifique au fournisseur, et je ne sais pas si MySQL a déjà eu une telle syntaxe. –

+0

merci, ça marche! –