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 :

2 LEFT JOIN sur une même table


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut 2 LEFT JOIN sur une même table
    Hello,

    Problème (simplifié) :
    Une table contenant des clients.
    Une table contenant une clé client_id, un champ date et un champ montant

    Lorsqu'un client verse un montant, une entrée est générée dans la 2e table.

    Je veux récupérer le montant total versé par un client X jusqu'au jour J.
    Dans la même requête, je dois avoir le montant total versé jusqu'au jour J-1an.



    Requête (base de donnée Firebird 2) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT c.client_id, SUM(p1.montant) as MT1, SUM(p2.montant) as MT2
    FROM CLIENT c
     
    LEFT JOIN PAIEMENT p1
    ON p1.client_id = c.client_id
    AND p1.dt_pai <= '01.01.07'
     
    LEFT JOIN PAIEMENT p2
    ON p2.client_id = c.client_id
    AND p2.dt_pai <= '01.01.06'
     
    WHERE c.client_id = 'ZZZ'
    GROUP BY c.client_id


    Ce qui ne joue pas :
    La valeur de MT1 et MT2 est toujours identique (et ne correspond pas aux montants réels). Comment le moteur de base de données traduit cette requêtes ? En quoi est-elle fausse ? Merci de vos réponses...

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    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 102
    Points : 28 399
    Points
    28 399
    Par défaut
    Citation Envoyé par dakan Voir le message
    Comment le moteur de base de données traduit cette requêtes ? En quoi est-elle fausse ?
    Je te propose d'exécuter ta requête modifiée comme ceci pour que tu comprennes ce qui se passe...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT c.client_id
      , p1.montant as MT1
      , p1.dt_pai as DT1
      , p2.montant as MT2
      , p2.dt_pai as DT1
     FROM CLIENT c
       LEFT JOIN PAIEMENT p1
         ON p1.client_id = c.client_id
         AND p1.dt_pai <= '01.01.07'
       LEFT JOIN PAIEMENT p2
         ON p2.client_id = c.client_id
        AND p2.dt_pai <= '01.01.06'
    WHERE c.client_id = 'ZZZ'
    ORDER BY c.client_id
      , p1.dt_pai as DT1
      , p2.dt_pai as DT1

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Je te propose d'exécuter ta requête modifiée comme ceci pour que tu comprennes ce qui se passe...
    Pourtant si simple à comprendre ...
    Je te remercie

    Bonne journée

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

Discussions similaires

  1. Deux inner join sur une même table
    Par Pachina75 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2014, 14h54
  2. LEFT JOIN sur une même table
    Par grinder59 dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/01/2012, 15h30
  3. Réponses: 4
    Dernier message: 06/11/2009, 12h35
  4. Réponses: 2
    Dernier message: 29/09/2004, 09h07
  5. jointure sur une même table
    Par guillaumeVb6 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/09/2004, 15h08

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