IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Problème pour afficher les résultats d'un count = 0


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème pour afficher les résultats d'un count = 0
    Bonsoir à tous,

    je travaille sur une table contenant des résultats de matchs de foot.
    Voici un aperçu de cette table nommée "matches" : https://imageshack.com/i/p89Cwf14p
    Les champs equipe_dom et equipe_ext font référence à l'id des équipes ayant joué à domicile et à l'extérieur pour chaque match.
    Voici un aperçu de la table faisant référence aux id des équipes. Elle se nomme "equipes" : https://imageshack.com/i/pbc5rGsUp
    Le champ championnat_id fait référence à l'id de la compétition dans laquelle chaque matche est joué.
    Voici un aperçu de la table faisant référence aux id des compétitions. Elle se nomme "championnats" : https://imageshack.com/i/ipSr3CuTp
    Pour finir, je m'intéresse uniquement à un certains nombre d'équipes (17), ce qui explique la condition WHERE sur certaines id d'équipes dans la requête qui va suivre.

    Maintenant que le décor est planté, voici la requête qui pose problème. J'aimerais compter le nombre de fois où chaque équipe qui m'intéresse à fait match nul à domicile, dans certaines compétitions je connais l'id.
    Quand j'exécute la requête sans mettre condition sur la compétition, tout marche nickel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT eq.id, eq.nom, count(ma.id) mj
    FROM equipes eq
    LEFT OUTER JOIN matches ma ON eq.id = ma.equipe_dom
    AND ma.score_dom = ma.score_ext
    WHERE (eq.id = 1 or eq.id = 3 or eq.id = 5 or eq.id = 6 or eq.id = 7 or eq.id = 8 or eq.id = 10 or eq.id = 11 or eq.id = 12 or eq.id = 13 or eq.id = 14 or eq.id = 15 or eq.id = 16 or eq.id = 31 or eq.id = 53 or eq.id = 104 or eq.id = 131)
    GROUP BY eq.id
    ORDER BY eq.id
    Dans mon résultat, les équipes ayant fait 0 match nul sont affichées avec une valeur de count = 0.

    Mais lorsque je veux donner une condition sur la compétition, ce qui implique par conséquent de faire une jointure avec la table "championnats", la requête suivante pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT eq.id, eq.nom, count(ma.id) mj
    FROM equipes eq
    LEFT OUTER JOIN matches ma ON eq.id = ma.equipe_dom
    INNER JOIN championnats ch ON ma.championnat_id = ch.id
    AND ma.score_dom = ma.score_ext
    WHERE (eq.id = 1 or eq.id = 3 or eq.id = 5 or eq.id = 6 or eq.id = 7 or eq.id = 8 or eq.id = 10 or eq.id = 11 or eq.id = 12 or eq.id = 13 or eq.id = 14 or eq.id = 15 or eq.id = 16 or eq.id = 31 or eq.id = 53 or eq.id = 104 or eq.id = 131)
    AND (ch.id = 20 or ch.id = 5 or ch.id = 7 or ch.id = 14 or ch.id = 16)
    GROUP BY eq.id
    ORDER BY eq.id
    Dans mon résultat, j'ai bien le tri fait sur les compétitions désirées, mais les équipes ayant fait 0 match nul ne sont plus affichées

    J'espère avoir été clair dans l'élaboration de mon problème !
    D'avance merci pour votre réponse

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Les équipes qui n'ont pas de match ne sont pas affichées à cause de la jointure avec la table championnats.
    Il faut utiliser ici une jointure externe, et de fait remonter les critères sur l'ID de championnats dans la jointure.
    D'ailleurs sur aucune autre colonne de championnats n'est utilisée, la jointure est inutile et il suffit d'ajouter un filtre sur ma.championnat_id.

    Tatayo.

    P.S. Pour la liste des id d'équipe, un IN rendrait la requête plus claire que cette liste de OR.
    Je dirai aussi qu'il manque eq.nom dans la clause GROUP-BY.

    Et pense aux balises CODE (ici code=sql), pour rendre le message plus clair

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/04/2015, 13h27
  2. Réponses: 5
    Dernier message: 29/01/2015, 10h57
  3. Réponses: 1
    Dernier message: 10/10/2007, 10h02
  4. Réponses: 5
    Dernier message: 28/03/2007, 23h29
  5. Problème pour afficher le résultat d'un calcul
    Par goomazio dans le forum Assembleur
    Réponses: 3
    Dernier message: 26/01/2006, 10h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo