Bonjour,
Imaginons 2 tables créées comme suit :
Cas très simple donc, on a des familles constitués de membres qui sont soit des homme (sexe_membre = 1) soit des femmes (sexe_membre = 2).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 CREATE TABLE `famille` ( `id_famille` int(11) NOT NULL auto_increment, `nom_famille` varchar(64) NOT NULL, PRIMARY KEY (`id_famille`) ) CREATE TABLE `membre` ( `id_membre` int(11) NOT NULL auto_increment, `famille_membre` int(11) NOT NULL, `nom_membre` varchar(64) NOT NULL, `sexe_membre` smallint(1) NOT NULL, PRIMARY KEY (`id_membre`), KEY `famille_membre` (`famille_membre`) )
pour la famille d'ID 1, appelée "famille 1", je met 3 membres : 2 hommes et 1 femme.
Imaginons maintenant que je veuille faire une requête qui va extraire pour une famille donnée (ou toutes à la fois) le nombre d'hommes et de femmes qui la constituent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 INSERT INTO `membre` (`id_membre`, `famille_membre`, `nom_membre`, `sexe_membre`) VALUES (1, 1, 'pierre', 1), (2, 1, 'julie', 2), (3, 1, 'jack', 1);
et la requête :
Et là, c'est le drame, puisque le résultat est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT nom_famille, count(h.id_membre) as nb_h, count(f.id_membre) as nb_f FROM famille left join membre as h on h.famille_membre = famille.id_famille and h.sexe_membre = 1 left join membre as f on f.famille_membre = famille.id_famille and f.sexe_membre = 2 where famille.id_famille = 1 group by famille.id_famille
alors que j'attendais nb_h = 2 et nb_f = 1...nom_famille : famille 1
nb_h : 2
nb_f : 2
Je suppose que j'ai du merder dans mon left join, mais je ne sais pas en quoi.
Si quelqu'un pouvait m'éclairer, je lui en saurait gré !
(j'utilise MySQL 5)
Partager