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 :

Requete select sur plusieurs tables


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Novembre 2006
    Messages : 31
    Points : 35
    Points
    35
    Par défaut Requete select sur plusieurs tables
    Bonjour à tous,
    J'ai un problème que je n'ai pas réussi à résoudre :
    Supposons que j'ai 4 tables table1,2,3,4 ; la table 1 contient une colonne obj_id, cette colonne peut contenir soit un id de table 2 ou 3, ou 4. ma requete consiste à prendre toutes les lignes de la table 1 mais en prenant avec des valeurs des autres tables comme les libellés par exemple, voilà ce j'ai fait :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.ID , t2.LIBELLE, t3.LIBELLE, t4.LIBELLE
    FROM table1 AS t1, table2 as t2, table3 AS t3 , table4 as t4
    where ( t1.module = "module_t2"  AND  t1.obj_id = t2.ID )
    or ( t1.module = "module_t3"  AND  t1.obj_id = t3.ID )
    or ( t1.module = "module_t4"  AND  t1.obj_id = t4.ID )
    Cependant cette requête passe trop de temps, pour me faire tout le produit cartésien entre ces 4 tables et rend prés d'un million de lignes redondantes, j'ai essayé avec des left Join , ça a marché mais mon problème c que je ne peut pas les utiliser parce que je doit transformer cette requête en HQL, vu que les tables ne sont pas LIÉES !! les left_join ne marchent plus.
    Y a t'il une autre solution en SQL ? quelque chose qui manque pour cerner les résultats ?

    Merci à vous d'avance , j'ai trop besoin d'une solution pllllzzzz

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par cl@ndestIno Voir le message
    la table 1 contient une colonne obj_id, cette colonne peut contenir soit un id de table 2 ou 3, ou 4.
    Euh... à mon avis il y a une erreur de conception ! Une colonne qui contient un id d'une autre table, c'est une clé étrangère. Et une clé étrangère ne fait référence qu'à une seule table !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Novembre 2006
    Messages : 31
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Euh... à mon avis il y a une erreur de conception ! Une colonne qui contient un id d'une autre table, c'est une clé étrangère. Et une clé étrangère ne fait référence qu'à une seule table !
    C'est vrai, c conçu comme ça , je n'ai rien à y changer , je doit juste trouver une requête qui me règle ça, supposons qu'on met les 3 clés étrangères dans la table 1 et que je n'ai qu'un objet de la table 2, les deux autres champs seront vides, de plus il y a possibilité de rajouter d'autres tables comme la 2, 3 et 4, alors imaginez s'il y en a 15, il va y avoir 15 clés étrangères

    Merci

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Essayez 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
        t1.ID,
        COALESCE(t2.LIBELLE, 'Pas de libelle t2') as Libelle_t2,
        COALESCE(t3.LIBELLE, 'Pas de libelle t3') as Libelle_t3,
        COALESCE(t4.LIBELLE, 'Pas de libelle t4') as Libelle_t4
    FROM
        table1 AS t1
        left outer join table2 AS t2
          on t1.obj_id = t2.ID
         and t1.module = 'module_t2'
        left outer join table3 AS t3 
          on t1.obj_id = t3.ID
         and t1.module = 'module_t3'
        left outer join table4 AS t4
          on t1.obj_id = t4.ID
         and t1.module = 'module_t4'

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/05/2006, 14h32
  2. [SQL Access] SELECT sur plusieurs Tables et Composer Champs
    Par Giuseppe dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 07/11/2005, 14h00
  3. SELECT sur plusieurs Tables et Composer Champs
    Par Giuseppe dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/11/2005, 12h27
  4. un seul SELECT sur plusieurs tables ?
    Par deloo dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/09/2005, 12h57
  5. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 13h54

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