[MySQL] problème de jointures entre 3 tables
Le
Stephane Coquillaud(nospam)
Bonjour,
Je débute avec MySQL et j'utilise la version 4.0.15
Mon problème est le suivant :
J'ai trois tables :
Fournisseurs (nofour, lbnom)
evaluations (nofour, note_global)
reclamations (nofour, noreclamation)
La table fournisseurs est la table maitre, un fournisseur peut avoir
plusieures evaluations et plusieures reclamations.
je desire faire une requête qui me retourne tout les fournisseurs avec la
moyenne de note_global et le nombre de reclamations par fournisseur.
Je fait donc :
select fournisseurs.nofour, lbnom, avg(note_global) as note,
count(reclamations.nofour) as reclamations
From fournisseurs
Left join evaluations
On fournisseurs.nofour = evaluations.nofour
Left join reclamations
On fournisseurs.nofour = reclamations.nofour
Group by fournisseurs.nofour
Cette requête fonctionne pour la note globale (si un fournisseur a deux
notes dans ses evaluations, j'obtient bien la moyenne), par contre, cela ne
fonctionne pas avec le nombre de reclamations, j'obtient toujours le double
du nombre réel de reclamations !
J'espère que cela n'est pas confu ?
Merci de votre aide
Je débute avec MySQL et j'utilise la version 4.0.15
Mon problème est le suivant :
J'ai trois tables :
Fournisseurs (nofour, lbnom)
evaluations (nofour, note_global)
reclamations (nofour, noreclamation)
La table fournisseurs est la table maitre, un fournisseur peut avoir
plusieures evaluations et plusieures reclamations.
je desire faire une requête qui me retourne tout les fournisseurs avec la
moyenne de note_global et le nombre de reclamations par fournisseur.
Je fait donc :
select fournisseurs.nofour, lbnom, avg(note_global) as note,
count(reclamations.nofour) as reclamations
From fournisseurs
Left join evaluations
On fournisseurs.nofour = evaluations.nofour
Left join reclamations
On fournisseurs.nofour = reclamations.nofour
Group by fournisseurs.nofour
Cette requête fonctionne pour la note globale (si un fournisseur a deux
notes dans ses evaluations, j'obtient bien la moyenne), par contre, cela ne
fonctionne pas avec le nombre de reclamations, j'obtient toujours le double
du nombre réel de reclamations !
J'espère que cela n'est pas confu ?
Merci de votre aide

Poser une question


dans ta requete essaye avec
count(distinct reclamations.nofour) as reclamations
cela permet d'eviter les doublons, je pense que ca peut venir de la.
"Stephane Coquillaud(nospam)" message de news: BC99E0D0.15FAD%
ne
double
a écrit le 8/04/04 11:38 :
Salut,
J'ai essayé, mais ça ne marche pas, puisque distinct ne retourne qu'une
seule valeur quelque soit le nombre de lignes avec le même nofour
Donc le count(distinct) retourne toujours 1.
En fait, je pense qu'il y a un produit cartesien dans ma requête mais je ne
sais pas comment le résoudre.
Si quelqu'un connaît la solution ?
Merci quand même