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 :

Un petit problème de jointure externe


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 47
    Points : 35
    Points
    35
    Par défaut Un petit problème de jointure externe
    Bonjour,

    J'ai un petit problème pour faire une bonne requête.

    J'ai deux tables :
    Table1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    +----+------+--------+
    | id | mois | valeur |
    +----+------+--------+
    |  1 | nov  |     10 |
    |  2 | dec  |     15 |
    |  3 | jan  |      7 |
    +----+------+--------+
    Et table2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    +----+------+--------+
    | id | mois | valeur |
    +----+------+--------+
    |  1 | oct  |    200 |
    |  2 | nov  |    110 |
    +----+------+--------+
    Et j'aimerais avoir le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    +------+---------+---------+
    | mois | valeur1 | valeur2 |
    +------+---------+---------+
    | oct  |      0 |     200  |
    | nov  |     10 |      110 |
    | dec  |     15 |       0  |
    | jan  |      7 |       0  |
    +------+---------+---------+
    Je pensais faire une jointure externe complète du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT a.* , b.*
    FROM table1 a
     RIGHT OUTER JOIN table2 b
      ON a.mois=b.mois
     
    UNION
     
    SELECT a.* , b.*
    FROM table1 a
     LEFT OUTER JOIN table2 b
      ON a.mois=b.mois
    Mais ça me donne le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    +------+------+--------+------+------+--------+
    | id   | mois | valeur | id   | mois | valeur |
    +------+------+--------+------+------+--------+
    | NULL | NULL |   NULL |    1 | oct  |    200 |
    |    1 | nov  |     10 |    2 | nov  |    110 |
    |    2 | dec  |     15 | NULL | NULL |   NULL |
    |    3 | jan  |      7 | NULL | NULL |   NULL |
    +------+------+--------+------+------+--------+
    Il ne me manque plus qu'à regrouper mes colonnes, mais je ne sais pas comment !

    Je sens que je brûle, non?

  2. #2
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonsoir,


    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
    SELECT CASE WHEN ISNULL(a.mois) THEN b.mois ELSE a.mois END as mois,
     CASE WHEN ISNULL(a.valeur) THEN 0 ELSE a.valeur END as valeur1,
     CASE WHEN ISNULL(b.valeur) THEN 0 ELSE b.valeur END as valaur2
    FROM table1 a
     RIGHT OUTER JOIN table2 b
      ON a.mois=b.mois
     
    UNION
     
    SELECT CASE WHEN a.mois = NULL THEN b.mois ELSE a.mois END,
     CASE WHEN ISNULL(a.valeur) THEN 0 ELSE a.valeur END,
     CASE WHEN ISNULL(b.valeur) THEN 0 ELSE b.valeur END
    FROM table1 a
     LEFT OUTER JOIN table2 b
      ON a.mois=b.mois

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    Excellent, tu es un dieu, merci beaucoup !

    Je cherchais un truc plus simple, mais comme ça, ça marche bien (en fait, j'ai déjà 3 niveaux de sous-requêtes).

    Merci encore

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

Discussions similaires

  1. Petit problème de jointure
    Par julie75 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 26/08/2007, 17h11
  2. Réponses: 24
    Dernier message: 24/07/2007, 17h48
  3. Problème de jointure externe
    Par Loko dans le forum Langage SQL
    Réponses: 15
    Dernier message: 24/07/2007, 12h04
  4. Problème de Jointure externe
    Par major2 dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2007, 17h58
  5. Petit problème de jointure
    Par LordBob dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/06/2007, 21h21

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