[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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fabien P
Le #21709831
slt,

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%
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

Stephane Coquillaud(nospam)
Le #21709811
dans l'article 40751daf$0$22849$, Fabien P à
a écrit le 8/04/04 11:38 :

slt,

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.





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
Publicité
Poster une réponse
Anonyme