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 :

Jointure avec NULL


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut Jointure avec NULL
    Bonjour,
    Je souhaite faire une jointure entre trois tables de la même base.
    Selon les critères de recherche les tables contiennent ou ne contiennent pas d'enregistrement.
    Je ne souhaite pas que les enregistrements nuls apparaissent dans le résultat.
    Ma requête initiale qui ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  *
    FROM table1 t1
    LEFT JOIN table2 t2 ON t2.IdClient = t1.ClientId
    LEFT JOIN table3 t3 ON t3.id = t1.id AND t3.id IS NOT NULL
    WHERE t1.Email =  'xxx.fr'
    AND t1.Doss =  'azerty'
    Même quand t3.id est NULL (donc inexistant le résultat s'affiche)
    Comment faire pour n'avoir que les résultats existants donc pas de résultats NULL ?
    D'avance merci à tous

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 008
    Points : 23 684
    Points
    23 684
    Par défaut
    Bonjour,

    Faites des jointures internes (INNER JOIN) et non pas externes.
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut
    Merci pour ta rapide réponse mais j'avais déjà essayé sans succès, la requête me retourne aucun résultat ni aucune erreur d'ailleurs !

    D'autre piste ?

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 008
    Points : 23 684
    Points
    23 684
    Par défaut
    Un petit exemple de données dans chaque table et du résultat attendu de la requête nous permettrait de t'aider plus efficacement
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut
    Je te renvoie ceci + tard, en ce moment j'ai une urgence.
    Dsl

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    vous voulez filtrer les lignes qui ne sont ni dans T2, ni dans T3 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT  *
    FROM table1 t1
    LEFT JOIN table2 t2 ON t2.IdClient = t1.ClientId
    LEFT JOIN table3 t3 ON t3.id = t1.id 
    WHERE t1.Email =  'xxx.fr'
    AND t1.Doss =  'azerty'
    AND (t2.id IS NOT NULL OR t3.id IS NOT NULL)

  7. #7
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 008
    Points : 23 684
    Points
    23 684
    Par défaut
    Ou encore avec la fonction COALESCE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT  *
    FROM table1 t1
    LEFT JOIN table2 t2 ON t2.IdClient = t1.ClientId
    LEFT JOIN table3 t3 ON t3.id = t1.id 
    WHERE t1.Email =  'xxx.fr'
    AND t1.Doss =  'azerty'
    AND COALESCE(t2.id, t3.id) IS NOT NULL
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut
    Je reviens un peu tardivement vers vous, dsl !
    Merci pour vos réponses mais aucune ne résout mon pb.

    J'ai tenter ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  *
    FROM table1 t1
    LEFT JOIN table2 t2 ON t2.IdClient = t1.ClientId
    LEFT JOIN (SELECT * FROM table3 t3 WHERE t3.id IS NOT NULL) t4 ON t4.id = t1.id
    WHERE t1.Email =  'xxx.fr'
    AND t1.Doss =  'azerty'
    En fait je ne veux joindre le SELECT t3 que si la condition ON de t4 est satisfaite !
    Des pistes des idées…
    D'avance merci.

  9. #9
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 008
    Points : 23 684
    Points
    23 684
    Par défaut
    Retour à la case départ : donnez-nous un exemple de vos données et le résultat attendu...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par bronon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LEFT JOIN (SELECT * FROM table3 t3 WHERE t3.id IS NOT NULL) t4 ON t4.id = t1.id
    La sous requete est inutile, car de toute façon, si t3.id est null, alors t4.id = t1.id ne sera jamais vrai...

    Comme dit ced, précisez votre besoin, et un jeu d'essai + résultat attendu sera certainement beaucoup plus clair !

Discussions similaires

  1. Requete select : jointure avec champs null
    Par Tidus159 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 06/06/2008, 14h31
  2. Jointure avec une composante NULL
    Par vmolines dans le forum Langage SQL
    Réponses: 11
    Dernier message: 08/04/2008, 13h30
  3. [EJBQL] Jointure avec un objet null ?
    Par mbouzouita dans le forum Java EE
    Réponses: 5
    Dernier message: 02/08/2007, 15h38
  4. [MySQL 4.1] Count sur jointure avec null
    Par Arnard dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/07/2007, 10h38
  5. [PostgreSQL 8.1] Problème de jointures avec une Fk null
    Par Reward dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/11/2006, 09h25

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