Update avec condition portant sur deux table [Résolu/Fermé]

Signaler
-
 marie -
Bonjour,

J'aimerai faire un update avec une condition qui dépend d'un champs d'une autre table.

J'ai deux table :

products(products_id , products quantity) et specials(products_id ...)

J'aimerai mettre à zero la quantité de tous les produits qui ne sont pas dans specials.

j'ai fait ainsi :

update products products set producs_quantity=0 where products.products_id=specials.products_id ,

ça marche pas. je suis sous mysql.

7 réponses

Messages postés
1041
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
14 mai 2019
51
c'est pas top (Mysql 5 est sorti depuis 2 ans) m'enfin ca devrait marcher quand meme :)

La seule piste que je voie : ta colonne products_id dans la table specials n'est PAS configuree en NOT NULL, ce qui fait qu'elle contient des "valeurs" NULL ... ca aurait aidé si tu avais poste le show create table ;)

Si c'est ca, 2 solutions :
- modifie la en NOT NULL de maniere a ce que il y ait des 0 (zero) au lieu de NULL
- essaie en sub-queries, mais je ne suis pas sur que ca marche en mysql 4 :

UPDATE products
SET products.quantity = 0
WHERE products_id NOT IN (
SELECT DISTINCT products_id FROM specials
)

Tip : souvent, c'est mieux de declarer les colonnes en NOT NULL, justement à cause de ce genre de problèmes ...
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 62580 internautes nous ont dit merci ce mois-ci

merci bcp :

UPDATE products
SET products_quantity = 0
WHERE products_id NOT IN (
SELECT DISTINCT products_id FROM specials
)

marche trés bien.

merci encore
Messages postés
1041
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
14 mai 2019
51
Bonjour,

"mettre à zero la quantité de tous les produits qui ne sont PAS dans specials" : essaie un truc comme ca :

UPDATE products SET products.quantity = 0
FROM products LEFT JOIN specials USING (products_id)
WHERE ISNULL(specials.products_id);

ou (je crois que les 2 marchent)

UPDATE products LEFT JOIN specials USING (products_id)
SET products.quantity = 0
WHERE specials.products_id IS NULL;



Bon courage
la premiere ne marche pas , il y a un probleme avec : WHERE ISNULL(specials.products_id);

La deuxieme me met toutes les quantity à 0 meme pour les produit qui sont dans specials.
Messages postés
1041
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
14 mai 2019
51
ca n'est pas normal ...
1/ quelle version de Mysql utilises-tu ?
2/ tu peux donner la structure de tes tables ((SHOW CREATE TABLE)
J'utilise EasyPhp , donc phpmyadmin version 2.6.1 et mysql 4.1.9.

La structure de mes tables :

specials a les champs suivants : specials_id(clé primaire) , products_id , status ... etc
products a les champs suivants : products_id(clé primaire) , products_quantity ... etc