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

Requêtes MySQL Discussion :

LEFT JOIN sur une table ayant elle meme une clef etrangère


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut LEFT JOIN sur une table ayant elle meme une clef etrangère
    Imaginons 3 tables :

    A(IDA int(11), #elementb int(11))
    B(IDB int(11), #elementc int(11) NOT NULL)
    C(IDC int(11), nom varcher(32))
    donc les tables A, B et C ont chacune une clef primaire, A peut cotenir 0 ou 1 lien vers la table B, et B un et un seul lien vers C...

    Si je veux récupérer la liste de tous les éléments de A avec ceux de B lorsque le lien existe, facile, je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from A left join B on B.IDB = A.elementb
    Par contre, quelle serait la syntaxe si je voulaisfaire la même chose mais avec en plus les éléments de C lié a chaque enregistrement de B ? `elementc` étant not null, je ne souhaite utiliser qu'un seul left join dans le requete.

    En vous remerciant.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Points : 117
    Points
    117
    Par défaut
    Peut être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT A.*, B.* 
    FROM Table_A A 
    LEFT JOIN Table_B B ON B.IDB = A.elementb
    JOIN Table_C C ON C.IDC = B.elementc

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    pas bon :/

    Il ne retourne que les lignes pour lesquelles il trouve des enregistrements de C non NULL, enregistrements qu'il ne peut trouver que si B n'est pas NULL... Bref, j'ai le même résultat que si j'avais ecrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from A, B, C where B.IDB = A.elementb and C.IDC = B.elementc
    EDIT :

    J'ai une solution en imbriquant des left join, mais franchement, si je pouvais en avoir qu'un seul das la requete, ça serait mieux...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from A left join B left join C on C.IDC = B.elementc on B.IDB = A.elementb

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    pourquoi cela ne te convient pas 2 jointures externes? je pense que c'est la solution la plus propre

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    Bon bha je vais garder ça et cocher résolu...

    Merci à vous.

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

Discussions similaires

  1. [CakePHP] Afficher un autre champ d'une clé étrangère à partir d'une table dont elle est issue
    Par PrincessKC dans le forum Bibliothèques et frameworks
    Réponses: 18
    Dernier message: 20/05/2014, 17h53
  2. LEFT JOIN SUR 2 TABLES EXTERNES
    Par DevServlet dans le forum JPA
    Réponses: 2
    Dernier message: 08/09/2009, 22h57
  3. left join sur deux tables !
    Par cLaSic dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/04/2009, 09h57
  4. [MySQL] 2 LEFT JOIN sur même table
    Par bupocirk dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/07/2007, 16h53
  5. Réponses: 1
    Dernier message: 12/04/2007, 17h08

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