SQL Update + where exists

Invité
Invité n'ayant pas de compte PHPfrance

16 mars 2010, 19:33

Bonjour,

Je suis en train d'essayer d'écrire une requête de mise à jour en SQL.
Cependant je rencontre un problème :
Lorsque j'écris la requête de cette manière
UPDATE Vendeur INNER JOIN Secteur ON Vendeur.Num_secteur=Secteur.Num_secteur SET fixe = fixe*1.04
WHERE Nom_secteur="est" OR Nom_secteur="sud";
j'obtiens les modifications souhaitées
Mais je n'aime pas trop utiliser inner join.

Lorsque j'écris la requête de la manière suivante :
UPDATE vendeur SET fixe = fixe*1.04
WHERE exists (select * from secteur where vendeur.num_secteur=secteur.num_secteur and secteur.nom_secteur ="est" or secteur.nom_secteur ="sud");
Tous les enregistrements se mettent à jour et pas seulement les enregistrements des vendeurs "est" et "sud".
Je n'arrive pas à voir pourquoi.

Pouvez-vous SVP m'indiquer l'erreur que je fais dans la deuxième solution ?

Bonne réception et merci de votre aide.

ViPHP
ViPHP | 1024 Messages

16 mars 2010, 20:31

Hello,

Dans ta 2e requête, la partie "EXISTS" renvoie true, donc l'update se fait pour tout le monde.

Il faut faire une jointure, d'une manière ou d'une autre.

A+

Pascal

Invité
Invité n'ayant pas de compte PHPfrance

16 mars 2010, 20:40

Merci pour ta réponse.

Effectivement si je supprime la fin de la requête (le "or") elle modifie juste les enregistrements "Est". OK
Comment rajouter une jointure à ce niveau pour qu'également "sud" soit pris en compte ? Je tourne
en rond !

Merci de ton aide !

ViPHP
ViPHP | 1024 Messages

16 mars 2010, 20:43

si ta 1ère requête marche, autant la garder, non ?

Sinon le soucis du "OR" c'est une parenthèse manquante.

A+

Pascal

Petit nouveau ! | 1 Messages

17 mars 2010, 00:25

Merci beaucoup ! ça marche !

Effectivement j'avais intégré des parenthèses mais pas au bon endroit.

A+