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 deux tables !


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Points : 22
    Points
    22
    Par défaut left join sur deux tables !
    Bonjour,
    j'ai deux tables :

    toto avec comme clé ID_toto
    titi avec comme clés ID_titi et ID_toto

    un toto peut avoir 0,1 ou plusieurs titi

    je cherche à faire une requête qui sélectionne pour un ID_toto,ID_titi donnés le toto associé!

    j'ai fais cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from toto as A left join titi as B
    on A.ID_toto=B.ID_toto
    where B.ID_toto='test1' and B.ID_titi='test2'
    Mais ca ne marche uniquement s'il ya une enregistrement de titi associé à toto!

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Citation Envoyé par cLaSic Voir le message
    Mais ca ne marche uniquement s'il ya une enregistrement de titi associé à toto!
    Jusque là tout me semble normal, c'est justement ce qu'on attend d'une jointure externe gauche.
    Si tu mets RIGHT JOIN ça devrait aller mieux, enfin, aller dans le sens recherché.

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Points : 22
    Points
    22
    Par défaut
    j'ai essayé avec RIGHT JOIN mais ca ne marche pas :/

  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 : 41
    Localisation : France

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

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

    peux tu donner un petit exemple du contenu de tes tables, le résultat que tu obtiens avec ta requête et le résultat que tu souhaites?

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Points : 22
    Points
    22
    Par défaut
    toto contient :
    enregistrement1 : toto1, toto1contenu
    enregistrement2 : toto2, toto2contenu
    enregistrement3 : toto3, toto3contenu

    titi contient :
    enregistrement1 : titi1, toto1, titi1contenu
    enregistrement2 : titi2, toto2, titi2contenu
    enregistrement3 : titi3, toto1, titi3contenu


    pour un critere (toto1, titi1) ca doit retourner :
    toto1, toto1contenu, toto1, titi1, titi1contenu

    pour un critere (toto2, titi3) ca doit retourner :
    toto2, toto2contenu


    MERCI

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM toto AS a 
    LEFT JOIN titi AS b ON a.ID_toto=b.ID_toto
    WHERE a.ID_toto='test1' 
    AND (b.ID_titi='test2' OR b.ID_titi IS NULL)
    Tes conditions de filtrage ne sont pas logiques, si b.ID_toto='test1' n'existe pas la jointure a.ID_toto=b.ID_toto ne peut pas s'opérer pour 'test1', c'est pourquoi il faut filtrer sur a.ID_toto='test1'.
    Ensuite si la jointure ne se fait pas b.ID_titi='test2' ne sera jamais vrai car b.ID_titi sera NULL.
    Tu as compris le principe ?

    Enfin, pour être exhaustif, je t'invite à lire ce petit billet de l'ami Fred :
    http://www.expreg.com/fred_article.p...re_des_etoiles

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Points : 22
    Points
    22
    Par défaut
    Tout à fait! et merci pour les explications

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

Discussions similaires

  1. [AC-2010] Double left join de deux table différentes vers une même table
    Par Nikimizi dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 19/08/2014, 15h13
  2. Réponses: 4
    Dernier message: 06/11/2009, 12h35
  3. LEFT JOIN SUR 2 TABLES EXTERNES
    Par DevServlet dans le forum JPA
    Réponses: 2
    Dernier message: 08/09/2009, 22h57
  4. COUNT/JOIN sur deux tables
    Par rozwel dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/08/2008, 17h27
  5. [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

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