Ok, je pense que ça vient du sens de la jointure.
On tente en effet de compter les occurrences de la table de droite en lien avec celle de gauche. Ici, ce sont les participations que l'on veut compter.
On a donc deux possibilités :
Soit inverser le JOIN en faisant un RIGHT OUTER JOIN soit en inversant les nom des tables, ce qui donnerait donc soit :
SELECT
p.ID_RANDONNEE,
p.BOUCLE_PARTICIPATION,
COUNT(*)
FROM `participation` p
RIGHT OUTER JOIN `randonneur` r
USING(`ID_RANDONNEUR`)
WHERE r.`SEXE_RANDONNEUR` = 'Femme'
GROUP BY p.`ID_RANDONNEE`, p.`BOUCLE_PARTICIPATION`;
soit :
SELECT
p.ID_RANDONNEE,
p.BOUCLE_PARTICIPATION,
COUNT(*)
FROM `randonneur` r
LEFT OUTER JOIN `participation` p
USING(`ID_RANDONNEUR`)
WHERE r.`SEXE_RANDONNEUR` = 'Femme'
GROUP BY p.`ID_RANDONNEE`, p.`BOUCLE_PARTICIPATION`;
Cela étant, il n'est pas exclu qu'à cause du type ENUM ça ne fonctionne toujours pas. Dans ce cas, il faudra peut-être faire quelque chose de plus subtil en récupérant une liste des valeurs possibles et faire une jointure supplémentaire dessus. Je vais attendre de savoir si cette solution permet de faire avancer le schmilblick.
Note : comme je n'aime pas écrire trop de code, j'ai réduit un peu en utilisant des alias pour les noms des tables, ça rend en outre les requête plus lisibles.
______________________________________________________________
Une question bien formulée, c'est un problème bien compris : ça représente déjà les 3/4 de la réponse ;)
Edited 1 time(s). Last edit at 01/24/2009 02:22PM by Jean Molliné.