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 même table


Sujet :

Requêtes MySQL

  1. #1
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut LEFT JOIN sur une même table
    Bonjour,

    j'ai un petit souci de conception d'une requête qui ne me renvoie pas le résultat attendu. Je dispose d'une table de FACTURE et d'une table ECRITURE composées de la façon suivante :

    FACTURE :
    FACTURE_ID
    FACTURE_NUMERO
    ...

    ECRITURE :
    ECRITURE_ID
    ECRITURE_TYPE
    FACTURE_ID
    ECRITURE_MONTANT
    ...

    Une écriture peut avoir 4 types. L'objectif de ma requête est de sortir, par facture, la somme des écritures par type.

    J'ai essayé ceci :

    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
    17
    18
    SELECT
    	FACTU_NUMERO,
    	SUM(e1.ECRITURE_MONTANT),
    	SUM(e2.ECRITURE_MONTANT),
    	SUM(e3.ECRITURE_MONTANT),
    	SUM(e4.ECRITURE_MONTANT)
    FROM
    	FACTURE LEFT JOIN 
    	ECRITURE AS e1 ON FACTURE.FACTURE_ID = e1.FACTURE_ID LEFT JOIN 
    	ECRITURE AS e2 ON FACTURE.FACTURE_ID = e2.FACTURE_ID LEFT JOIN 
    	ECRITURE AS e3 ON FACTURE.FACTURE_ID = e3.FACTURE_ID LEFT JOIN 
    	ECRITURE AS e4 ON FACTURE.FACTURE_ID = e4.FACTURE_ID
    WHERE 
    	e1.ECRITURE_TYPE = 1 AND 
    	e2.ECRITURE_TYPE = 2 AND 
    	e3.ECRITURE_TYPE = 3 AND 
    	e4.ECRITURE_TYPE = 4 
    GROUP BY FACTU_NUMERO
    Le souci est que je n'ai, comme résultat, que les factures qui ont des écritures dans les 4 catégories...

    Auriez-vous une idée ?

    Merci de votre aide !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    Alors votre problème vient du fait que vous mettiez les conditions de restrictions dans votre clause WHERE. De ce fait les jointures externes se transforment en jointure internes.

    Donc il faut dépalcer ces conditions de restrictrion dans la clause de jointure.

    Ceci étant dit votre requête n'est pas bien écrite, vous faites 4 jointures alors qu'une seule suffirait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT a.FACTU_NUMERO,
    	SUM(case when coalesce(ECRITURE_TYPE, 0) = 1 then e1.ECRITURE_MONTANT else 0 end),
    	SUM(case when coalesce(ECRITURE_TYPE, 0) = 2 then e1.ECRITURE_MONTANT else 0 end),
    	SUM(case when coalesce(ECRITURE_TYPE, 0) = 3 then e1.ECRITURE_MONTANT else 0 end),
    	SUM(case when coalesce(ECRITURE_TYPE, 0) = 4 then e1.ECRITURE_MONTANT else 0 end)
    FROM FACTURE a
    	LEFT JOIN 	ECRITURE AS e1 ON a.FACTURE_ID = e1.FACTURE_ID  
    GROUP BY a.FACTU_NUMERO

  3. #3
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Evidemment...
    Merci beaucoup !

+ 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. Réponses: 4
    Dernier message: 06/11/2009, 12h35
  3. 2 LEFT JOIN sur une même table
    Par dakan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/10/2007, 13h51
  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