MySQL Forums
Forum List  »  French

Re: Jointures
Posted by: Jean Molliné
Date: January 24, 2009 02:19PM

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é.

Options: ReplyQuote


Subject
Views
Written By
Posted
7154
January 24, 2009 11:24AM
3510
January 24, 2009 11:54AM
3445
January 24, 2009 12:00PM
Re: Jointures
3445
January 24, 2009 02:19PM
3567
January 25, 2009 03:19AM
3485
January 25, 2009 07:55AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.