Jointures
Posted by:
Nicola T
Date: January 24, 2009 11:24AM
Bonjour à tous,
Après plusieurs heures de tentatives, je me résous à poster sur ce forum.
J'ai cherché plusieurs solutions sur Google, et même en essayant, ça ne marche pas.
Contexte :
J'ai 3 tables : "randonneur", "participation", "randonnee". La table participation est une table d'association entre "randonneur" et "randonnee".
Chaque randonneur peut participer aux différentes randonnées. Une randonnée est décomposée en 3 boucles (petite, moyenne, grande), à l'aide du champ BOUCLE_PARTICIPATION qui est de type ENUM.
Mon but est de connaître le nombre de femmes ayant participé à chaque boucle de chaque randonnée (donc combien de femmes ont participé à la randonnée 1 en réalisant la petite boucle ? la moyenne boucle ? et la grande boucle ?).
Voici ma requête :
select `participation`.`ID_RANDONNEE`, `participation`.`BOUCLE_PARTICIPATION`, count(*)
from `participation`
left join `randonneur`
using(`ID_RANDONNEUR`)
where `randonneur`.`SEXE_RANDONNEUR`='Femme'
group by `participation`.`ID_RANDONNEE`, `participation`.`BOUCLE_PARTICIPATION`;
Le problème qui se pose est que cette requête me donne bien ces valeurs, sauf que j'aimerais également que les boucles où aucune femme n'a participé soient visibles quand même avec une valeur à 0.
Sur le net, j'ai vu qu'il fallait apparemment utiliser un LEFT JOIN, ce que j'ai fait, mais qui continue de ne rien me donner.
Voici ce que me donne la requête actuellement :
ID_RANDONNEE BOUCLE_PARTICIPATION count(*)
15 Petite 2
15 Moyenne 1
15 Grande 1
16 Petite 1
16 Grande 1
17 Petite 1
18 Petite 1
18 Grande 1
Comme vous pourrez le constater, pour certaines randonnées, les boucles où aucune femme n'a participé sont masquées. C'est bien ces lignes que je souhaiterais rendre visibles dans le résultat de la requête, avec la valeur 0 au niveau du count(*).
Si jamais je n'avais pas été assez clair dans mes propos, voici le résultat que j'aimerais obtenir :
ID_RANDONNEE BOUCLE_PARTICIPATION count(*)
15 Petite 2
15 Moyenne 1
15 Grande 1
16 Petite 1
16 Moyenne 0
16 Grande 1
17 Petite 1
17 Moyenne 0
17 Grande 0
18 Petite 1
18 Moyenne 0
18 Grande 1
En espérant avoir été assez explicite sur mon problème.
En vous remerciant par avance.
Nico.
Edited 1 time(s). Last edit at 01/24/2009 11:29AM by Nicola T.