[MySQL] resultats differents selon requete

Résolu/Fermé
chmanu Messages postés 166 Date d'inscription mardi 15 mai 2001 Statut Membre Dernière intervention 3 septembre 2012 - 20 avril 2004 à 11:37
naima0104 Messages postés 13 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 21 avril 2004 - 21 avril 2004 à 16:15
Bonjour,

J'ai un etrange pb en SQL (MySQL) car je reconcois une base et migre des tables vers d'autres.
J ai une table IMP_Caract_Produits contenant un champ inflammable et je reconstruis cela en créant une table dangerP ou existe un enregistrement inflammable (idenfié 2).
Ce qui donne la requete suivante :
insert into Produit_DangerP (Produit_DangerP.IDDangerP,  
Produit_DangerP.IDProduit)
select 2, IMP_produits.IDProduit
from IMP_produits, IMP_Caract_Produits
where IMP_Caract_Produits.inflammable = "-1"
and IMP_Caract_Produits.IDProduit = IMP_produits.IDProduit 

Ce qui me retourne :
Query OK, 51 rows affected (0.02) sec
Records: 51  Duplicates: 0  Warnings: 0


Or lorsque j'exécue ma requete de sélection :
select distinct * from IMP_Caract_Produits
where IMP_Caract_Produits.inflammable

j'obtiens :
52 rows in set (0.01) sec


Bref, j'ai regardé de plus près, et je me suis apercu qu un enregistrement manquait (ce n est pas un doublon, ni rien de spécial) et si j exécute la requete d insertion plusieurs fois, c est toujours le meme qui manque.

QQ un a déjà eu ce pb, ou une idée sur la validité de ma(mes) requete(s) qui ne sont pourtant pas des plus compliquées !

Merci beaucoup, car par la suite, il y a un travail d automatisation à faire derriere.

Chmanu

6 réponses

mofo Messages postés 46 Date d'inscription mercredi 25 avril 2001 Statut Membre Dernière intervention 23 mai 2007 2
20 avril 2004 à 13:00
Pas évident à première vue ... peux tu nous communiquer la structure des tables afin de tester (sauf si ces tables sont confidentielles bien sur).

++
0
chmanu Messages postés 166 Date d'inscription mardi 15 mai 2001 Statut Membre Dernière intervention 3 septembre 2012 28
20 avril 2004 à 15:40
Bonjour,
merci de me répondre, mais effectivement, je prefere garder l'entiere structure pour moi.
J ai également utilisé cette méthode depuis d autres tables vers encore d autres et je n ai pas eu de pb. Je me demandais juste si il y avait une faille dans ma requete, dans le moteur de MySQL (ce qui m etonnerait), ou dans une quelconque particularite qui m aurait echapé sur les données (j ai fait un import depuis access à la base - ce qui est peut etre une bonne piste d explication)

Chmanu
0
mofo Messages postés 46 Date d'inscription mercredi 25 avril 2001 Statut Membre Dernière intervention 23 mai 2007 2
20 avril 2004 à 16:15
J'ai une remarque toute bete :

D'un cote tu fais ton select avec inflammable = "-1" et de l'autre select sans cette condition. Tu es sur qu'ils sont tous avec "-1" ?

C'est juste pour vérifier ... la différence pourrait venir de là

++
0
chmanu Messages postés 166 Date d'inscription mardi 15 mai 2001 Statut Membre Dernière intervention 3 septembre 2012 28
20 avril 2004 à 16:56
oui, effectivement, bonne remarque, mais toutes mes valeurs sont à -1 et j ai également essayé avec
select distinct * from IMP_Caract_Produits
where IMP_Caract_Produits.inflammable="-1"

et j ai le meme résultat (52 enregistrements connus)

Chmanu
0
naima0104 Messages postés 13 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 21 avril 2004
21 avril 2004 à 14:46
Bonjour, je crois que dans ton INSERT tu RECUPERE les données pas seulement de la table "IMP_Caract_Produits" , mais tu as une jointure des 2 tables "IMP_Caract_Produits" ET "IMP_produits" alors dans ce cas il faut faire :

SELECT COUNT(*) FROM IMP_produits, IMP_Caract_Produits
where IMP_Caract_Produits.inflammable = "-1"
and IMP_Caract_Produits.IDProduit = IMP_produits.IDProduit

==> SI ça donne que 51 , ça montre que un IDPRODUIT existe dans l'une et pas dans l'autre.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chmanu Messages postés 166 Date d'inscription mardi 15 mai 2001 Statut Membre Dernière intervention 3 septembre 2012 28
21 avril 2004 à 15:55
Bingo,

en effet,
SELECT COUNT(*) FROM IMP_Caract_Produits 
where IMP_Caract_Produits.inflammable = "-1" 
retourne 52
et
SELECT COUNT(*) FROM IMP_produits, IMP_Caract_Produits 
where IMP_Caract_Produits.inflammable = "-1" 
and IMP_Caract_Produits.IDProduit = IMP_produits.IDProduit

Et comme j insérais IMP_Produit.IDProduit et non IMP_Caract_Produit.IDProduit, il ne connaissai pas et n insérait donc pas.

Merci beaucoup, c'est vrai que j'avais pas pensé à ca, c etait tellement improbable.
En fait, c est un projet que je reprend, et je m apercois au fil du temps que le concepteur n avait pas de notions de bdd. et donc dans ce cas, un produit était considéré inflammable sans avoir été défini auparavant.

Chmanu
0
naima0104 Messages postés 13 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 21 avril 2004
21 avril 2004 à 16:15
C'est vrai , il faut toujours faire attention aux jointures entre les tables de tes requettes , que ça soit pour un SELECT ou UPDATE ou DELETTE.
Bon courage
0