Update avec condition portant sur deux table

Résolu/Fermé
marie - 3 juin 2009 à 20:38
 marie - 4 juin 2009 à 10:34
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.
A voir également:

3 réponses

dam75 Messages postés 1043 Date d'inscription lundi 4 mai 2009 Statut Webmaster Dernière intervention 21 février 2023 67
4 juin 2009 à 10:20
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 bcp :

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

marche trés bien.

merci encore
0
dam75 Messages postés 1043 Date d'inscription lundi 4 mai 2009 Statut Webmaster Dernière intervention 21 février 2023 67
3 juin 2009 à 20:52
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
0
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.
0
dam75 Messages postés 1043 Date d'inscription lundi 4 mai 2009 Statut Webmaster Dernière intervention 21 février 2023 67
4 juin 2009 à 09:49
ca n'est pas normal ...
1/ quelle version de Mysql utilises-tu ?
2/ tu peux donner la structure de tes tables ((SHOW CREATE TABLE)
0
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
0