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 :

Requète sur plusieurs tables


Sujet :

Langage SQL

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

    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Requète sur plusieurs tables
    Bonjour,

    J'ai besoin de votre aide, voilà j'ai à ma disposition 5 tables qui contiennent des Articles avec des prix...
    Ces tables comportent des articles en commun, mais également des articles différents.

    Mon problème réside dans la création d'une requete qui donne une liste de tous les articles pour les 5 tables et leur prix respectifs dans les tables (je sais pas si je suis trop clair, voici un exemple)

    Ex :

    Table 1

    Article Prix
    123 25€
    456 30€
    789 50€



    Table 2

    Article Prix
    123 25€
    456 40€
    4538 50€



    Table 3

    Article Prix
    123 35€
    2268 40€
    4538 50€



    Et j'aimerais donc avoir un résultat de la sorte :

    ArticlesTab1 | Prix | ArticlesTab2 | Prix | ArticlesTab3 | Prix

    123 | 25€ | 123 | 25€ | 123 | 35€
    456 | 30€ | 456 | 40€ | 456 | Null
    789 | 50€ | 789 | Null | 789 | Null


    En gros l'idée étant de faire apparaitre une liste de tous les Articles présents dans les tables pour comparer leur prix

    Voilà si vous pouviez m'aider à résoudre ce problème avec une requete SQL ce serait fort aimable

    Cordialement.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Points : 15
    Points
    15
    Par défaut
    Bonjour corsica13,

    En passant par Left Outer Join entre la table1 et les autres ça donne le resultat attendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT
            dbo.table1.Article ,
            dbo.table1.Prix ,
            dbo.table1.Article AS ArticleTab2,
            dbo.table2.Prix ,
            dbo.table1.Article AS ArticleTab3,
            dbo.table3.Prix
    FROM
        dbo.table1
        LEFT OUTER JOIN dbo.table2 ON dbo.table2.Article = dbo.table1.Article
        LEFT OUTER JOIN table3 ON dbo.table3.Article = dbo.table1.Article
    Voici les Script utilisé pour tester :
    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
     
    CREATE TABLE table1 ( Article INT, Prix INT )
    CREATE TABLE table2 ( Article INT, Prix INT )
    CREATE TABLE table3 ( Article INT, Prix INT )
     
    INSERT  INTO dbo.table1 ( Article, Prix )VALUES (123,25)
    INSERT  INTO dbo.table1 ( Article, Prix )VALUES (456,30)
    INSERT  INTO dbo.table1 ( Article, Prix )VALUES (789,50)
     
    INSERT  INTO dbo.table2 ( Article, Prix )VALUES (123,25)
    INSERT  INTO dbo.table2 ( Article, Prix )VALUES (456,40)
    INSERT  INTO dbo.table2 ( Article, Prix )VALUES (4538,50)
     
    INSERT  INTO dbo.table3 ( Article, Prix )VALUES (123,25)
    INSERT  INTO dbo.table3 ( Article, Prix )VALUES (2268,40)
    INSERT  INTO dbo.table3 ( Article, Prix )VALUES (4538,50)
    Pour les prix, j'ai utilisé des Int, au lieu de décimal afin de faciliter les tests.

    Hope this helps

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

    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Bonjour

    Merci d'avoir pris le temps de m'aider, mais le problème c'est qu'avec votre réponse, je n'ai que les Articles de la table 1, donc les autres sont soit vides soit remplis, mais il me manque tous les autres articles qui existent dans les tables 2, 3 etc...mais pas dans la table 1

    Alors c'était peut-être mal expliqué dans ma demande

    Ps : Je tiens à préciser que je travaille sous Access au cas où...

  4. #4
    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,

    Pourquoi avoir 5 tables d'articles ?

    La requete pour répondre à ce besoin est du coup complexe à cause de votre modélisation ....

    Pour la requete je ne vois qu'une solution potable :
    - créer un requete qui liste tous les articles, ceci grace à un "UNION" entre les différentes tables
    - joindre les 5 tables tables d'articles à cette requette avec des jointures externes.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Pour les 5 tables, c'est justement parce-que je les extrais d'un logiciel dans le but de comparer les prix afin de voir les éventuelles différences qui pourrait y avoir d'une extraction à une autre...

    créer un requete qui liste tous les articles, ceci grace à un "UNION" entre les différentes tables
    Pour ça je vois ce que vous voulez dire, j'y ai pensé, mais pour la seconde partie de la réponse
    joindre les 5 tables tables d'articles à cette requette avec des jointures externes.
    je sèche un peu

  6. #6
    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
    Oudina vous a montré la syntaxe des jointures externes.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Oui mais là j'ai l'impression que vous parlez de joindre une table à la requête que l'on vient de créer avec des Unions ! et ça je fais comment ?

    Pour reprendre Oudina, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
            dbo.table1.Article ,
            dbo.table1.Prix ,
            dbo.table1.Article AS ArticleTab2,
            dbo.table2.Prix ,
            dbo.table1.Article AS ArticleTab3,
            dbo.table3.Prix
    FROM
        dbo.table1
        LEFT OUTER JOIN dbo.table2 ON dbo.table2.Article = dbo.table1.Article
        LEFT OUTER JOIN table3 ON dbo.table3.Article = dbo.table1.Article
    Sauf que je rajoute Requete1.Article et Requete1.Prix dans le Select puis REQUETE1 dans le FROM ?

  8. #8
    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
    avec une sous-requête

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

    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Bon bè ça a marché je pense je ne savais pas qu'on pouvait faire une jointure entre des tables et une requète dans le FROM...

    Merci beaucoup de vos explications et d'avoir pris du temps pour m'expliquer.

    Au plaisir
    Cdlt.

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 400
    Points
    28 400
    Par défaut
    Pour ta culture, la "requête dans le from" est appelée table dérivée dans la bonne littérature

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

Discussions similaires

  1. suite au problème de requête sur plusieur table
    Par michelGProuq dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/07/2006, 16h19
  2. [VB6] RecordSet, Oracle, requête sur plusieurs Tables
    Par pier* dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 13/04/2006, 10h19
  3. Requête sur plusieurs tables
    Par sta_schmitt dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/03/2006, 13h54
  4. Requéte sur plusieurs tables
    Par polux23 dans le forum Requêtes
    Réponses: 11
    Dernier message: 23/02/2006, 23h00
  5. Requête sur plusieurs tables
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 11/07/2005, 12h25

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