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 :

LEFT JOIN et l'ajout d'une clause AND


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de aelmalki
    Inscrit en
    Mars 2009
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 250
    Points : 125
    Points
    125
    Par défaut LEFT JOIN et l'ajout d'une clause AND
    Bonjour,

    Je vous expose un petit problème dans un LEFT JOIN que je n'arrive pas à résoudre.

    J'ai deux tables : PERSONNE et ENFANT, l'id de la personne migre vers l'enfant.
    Je veux sélectionner le nombre d'allocation familiale de chaque personne, que ce soit avec ou sans enfants, avec cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT personne.id, SUM(enfant.alloc) 
    FROM PERSONNE personne LEFT JOIN ENFANT enfant ON personne.id=enfant.id_personne
    WHERE personne.id IN(1,2,3,4) 
    GROUP BY personne.id;
    ça marche très bien, j'ai le SUM pour les personnes avec enfant est un NULL pour les personnes sans enfants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ID | SUM
    1  | 250 
    2  | 369
    3  | NULL
    4  | 15
    Maintenant je veux ajouter une clause dans la table ENFANT, l'ajout de cette clause fait disparaître la personne sans enfant (id_personne=3), voici la requête avec le clause ajoutée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT personne.id, SUM(enfant.alloc) 
    FROM PERSONNE personne LEFT JOIN ENFANT enfant ON personne.id=enfant.id_personne
    WHERE personne.id IN(1,2,3,4) 
    AND enfant.age = 10
    GROUP BY personne.id;
    le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ID | SUM
    1  | 15
    2  | 19
    4  | 1
    Comment pourrais-je conserver la personne 3 avec la valeur NULL pour la somme ?

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 802
    Points
    30 802
    Par défaut
    Il suffit de déplacer la condition au niveau de la jointure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  personne.id
        ,   SUM(enfant.alloc) 
    FROM    PERSONNE personne 
        LEFT JOIN 
            ENFANT enfant 
            ON  personne.id=enfant.id_personne
            AND enfant.age = 10
    WHERE   personne.id IN(1,2,3,4) 
    GROUP BY personne.id;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre habitué Avatar de aelmalki
    Inscrit en
    Mars 2009
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 250
    Points : 125
    Points
    125
    Par défaut
    Ah oui, ça marche, comme pour la liaison entre les personnes et enfants.
    Merci beaucoup pour votre aide.

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

Discussions similaires

  1. Comment les SGBD traduisent une clause LEFT OUTER JOIN
    Par flamant dans le forum Hibernate
    Réponses: 9
    Dernier message: 03/01/2013, 06h37
  2. left join avec un champ d'une troisième table
    Par sevy1881 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/07/2010, 12h09
  3. Une clause WHERE avant un LEFT JOIN ?
    Par bugalood dans le forum Langage SQL
    Réponses: 11
    Dernier message: 27/07/2005, 14h22
  4. Creer une requete avec des LEFT JOIN et des GRO
    Par donbuz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/09/2004, 15h53
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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