Page 1 sur 1

SQL Update + where exists

Posté : 16 mars 2010, 19:33
par Invité
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.

Re: SQL Update + where exists

Posté : 16 mars 2010, 20:31
par pascaltje
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

Re: SQL Update + where exists

Posté : 16 mars 2010, 20:40
par Invité
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 !

Re: SQL Update + where exists

Posté : 16 mars 2010, 20:43
par pascaltje
si ta 1ère requête marche, autant la garder, non ?

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

A+

Pascal

Re: SQL Update + where exists

Posté : 17 mars 2010, 00:25
par Filou
Merci beaucoup ! ça marche !

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

A+