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 :

Jointure de deux tables : même id plusieurs valeurs


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Par défaut Jointure de deux tables : même id plusieurs valeurs
    Bonjour a tous,

    Voila mon probléme.
    J'ai 2 tables:

    TABLE 1

    news_id | news_title

    32 | bureau
    33 | chaise

    TABLE 2

    news_id | meuble_id | valeur

    32 | 1 | erte.jpg
    32 | 2 | rouge
    32 | 3 | cours
    33 | 2 | bleu
    33 | 3 | jardin


    je voudrai pouvoir afficher ceci:

    news_id | news_title|valeur du meuble_id 2|valeur du meuble_id 3
    32 | bureau | rouge | cours
    33 | chaise | bleu |jardin


    je suis pas un super pro de sql, je ne sais pas trop comment faire , j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT news_id,valeur,news_title,meuble_id 	 FROM table1,table2 WHERE table1.news_id=table2.news_id
      ";
    mais cela m'affiche 3fois la ligne 32 et 2 fois la ligne 33.

    si quelqu"'un a une solution?
    merci

  2. #2
    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
    Par défaut
    Bonjour,

    Vous pouvez utiliser PIVOT, ou le faire à la main si votre SGBDR ne l'implémente pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT 
    		n.news_id,
    		n.news_title,
    		MAX(CASE WHEN m.meuble_id = 2 THEN m.valeur END )AS ValeurMeuble2,
    		MAX(CASE WHEN m.meuble_id = 3 THEN m.valeur END )AS ValeurMeuble3
    FROM		TABLE1 n
    INNER JOIN	TABLE2 m
    	ON		m.news_id = n.news_id
    WHERE	 	m.meuble_id IN(2,3)
    GROUP BY 
    		n.news_id,
    		n.news_title

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 134
    Par défaut
    Une autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT  tb1.news_id
        ,   tb1.news_title
        ,   vl2.valeur  valeur_2  
        ,   vl3.valeur  valeur_3
    FROM    table1  tb1
        LEFT JOIN
            table2  vl2
            ON  tb1.news_id = vl2.news_id
            AND vl2.meuble_id   = 2
        LEFT JOIN
            table2  vl3
            ON  tb1.news_id = vl3.news_id
            AND vl3.meuble_id   = 3
    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.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Par défaut
    Merci beaucoup, ça marche très bien!

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Par défaut
    Dernière petite chose,

    j'ai une 3éme table:

    TABLE 3

    category_id | category_name
    1 | general
    2 | vendredi

    et donc dans ma TABLE 1

    TABLE 1

    news_id | news_title|category_id

    32 | bureau |1
    33 | chaise | 2

    TABLE 2

    news_id | meuble_id | valeur

    32 | 1 | erte.jpg
    32 | 2 | rouge
    32 | 3 | cours
    33 | 2 | bleu
    33 | 3 | jardin

    je voudrai donc maintant pouvoir afficher ceci:

    news_id | news_title|valeur du meuble_id 2|valeur du meuble_id 3|category_name
    32 | bureau | rouge | cours|general
    33 | chaise | bleu |jardin|vendredi


    j'ai donc pris exemple sur vos réponse et fait 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
     
    SELECT 
                   l.category_name
    		n.news_id,
    		n.news_title,
    		MAX(CASE WHEN m.meuble_id = 2 THEN m.valeur END )AS ValeurMeuble2,
    		MAX(CASE WHEN m.meuble_id = 3 THEN m.valeur END )AS ValeurMeuble3
    FROM		TABLE1 n
    INNER JOIN	TABLE2 m
    	ON		m.news_id = n.news_id
    INNER JOIN	TABLE3 l
    	ON		l.category_id = n.category_id
    WHERE	 	m.meuble_id IN(2,3)
    GROUP BY 
    		n.news_id,
    		n.news_title

    mais cela ne marche pas.
    Merci encore

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 134
    Par défaut
    Citation Envoyé par paddev Voir le message
    mais cela ne marche pas.
    Mais encore...
    Un message d'erreur ? un résultat qui n'est pas celui attendu ?
    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.

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

Discussions similaires

  1. [MySQL] jointure entre deux table qui n'appartiennet pas al même base
    Par bourbita.thameur dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/04/2009, 15h08
  2. [MySQL] Faire une jointure entre deux tables qui ne sont pas dans la même base de données
    Par sandddy dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 03/04/2008, 14h18
  3. [MySQL] Jointure entre deux tables
    Par Flushovsky dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/10/2005, 18h55
  4. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 15h11
  5. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50

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