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 :

[Mysql 5.0.22] Probleme jointure externe; ne marche pas ?


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 30
    Points : 18
    Points
    18
    Par défaut [Mysql 5.0.22] Probleme jointure externe; ne marche pas ?
    Bonjour a tous !

    Pour un site de pronostiques de matchs de foot, j'ai notamment deux tables
    Journee (key : num), et prono (key : joueur_id, journee_num).

    Une ligne pour un pronostique (table prono) a donc pour cle un joueur(joueur_id) pour une journee (journee.num).

    J'aimerais pouvoir recuperer les les pronostiques n'ayant pas ete effectués, j'utilise donc une jointure externe LEFT OUTER JOIN, mais celle ci ne fonctionne pas, elle se comporte comme une jointure interne.

    Voila la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT num, points
    FROM journee
    LEFT  OUTER  JOIN prono ON num = journee.num
    Cette requete ne me renvoie que les lignes conjointes des deux tables...Je ne comprend pas...

    Je suis sur Mysql 5.0.22.

    Voila, merci d'avance !!!

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut,

    As-tu des enregistrement dans ta table journee qui n'ont pas de correspondance dans prono ?

    Nous as-tu fait un copier-coller exact de ta requête qui ne fonctionne pas ?
    La bonne requête ne serait-elle pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT num, points
       FROM journee LEFT OUTER JOIN prono
                    ON num = journee_num

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Oui, pardon tu as raison, il s'agit la d'une erreur de frappe.

    Ma requete est bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT num, points
       FROM journee LEFT OUTER JOIN prono
                    ON num = journee_num
    J'ai effectivement des joueurs qui ne pronostiquent pas pour certaines journées... Je veux donc afficher tous les pronostiques + les lignes coté prono pour les pronostiques n'ayant pas été effectués, une ligne par journee.joueur.

    Autre exemple : j'ai un joueur 'admin' pour des besoins d'acces a certaines infos.
    Bref, ce joueur ne pronostique jamais.

    Ansi, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT num, points
    FROM journee
    LEFT OUTER JOIN prono ON num = journee_num
    WHERE joueur_id = 50
    (50 étant l'ID de l'admin).

    Et bien, cette requête ne me renvoie aucune réponse, comme si j'avais fait un 'inner join '...Je me pose vraiment des questions la...J'ai bien déclaré les champs 'journee_num' et 'joueur_id' de la table `prono` comme étant FK des champs PK 'id' de la table `joueur`et 'num' de la table `journee`, avec 'on delete cascade'. Mes tables sont des InnoDB, pour info si ça a une importance.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Pardon pour le doublon.

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Concernant ta dernière requête, la jointure externe ne peut fonctionner car ta clause WHERE porte sur la table prono ! As-tu testé ta première requête SANS clause Where ?

    Pour avoir le résultat souhaité, 2 solutions :

    1. Mettre la condition dans la jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT num, points
      FROM journee LEFT OUTER JOIN prono 
                   ON (num = journee_num AND joueur_id = 50)
    2. Autoriser le NULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT num, points
      FROM journee LEFT OUTER JOIN prono 
                   ON num = journee_num
     WHERE (joueur_id = 50 OR joueur_id IS NULL)

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    OK, la première de tes solutions marche !!!
    Je n'avais pas pensé a mettre la clause dans le on...Je ne savais pas en fait que la présence d'une clause Where sur la deuxieme table ne fonctionnait pas.

    Merci beacoup a vous !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/12/2014, 12h49
  2. Jointure externe ne fonctionnant pas (Je pense)
    Par miketidy dans le forum Requêtes
    Réponses: 3
    Dernier message: 24/11/2010, 17h35
  3. jointure qui ne marche pas Mysql
    Par sinifer dans le forum Requêtes
    Réponses: 13
    Dernier message: 29/04/2009, 10h11
  4. Probleme Jointure externe
    Par sanomory dans le forum Oracle
    Réponses: 14
    Dernier message: 11/12/2006, 15h09
  5. probleme jointure externe
    Par lazzeroni dans le forum Oracle
    Réponses: 1
    Dernier message: 24/05/2006, 10h38

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