Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[MySQL] problème de jointures entre 3 tables

2 réponses
Avatar
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

2 réponses

Avatar
Fabien P
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)" a écrit dans le
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

Avatar
Stephane Coquillaud(nospam)
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