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 :

Recherche sur plusieures tables en SQL


Sujet :

Langage SQL

  1. #1
    Membre régulier Avatar de anas.eh
    Profil pro
    Inscrit en
    Février 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2007
    Messages : 181
    Points : 119
    Points
    119
    Par défaut Recherche sur plusieures tables en SQL
    Bonjour,

    J'ai un problème et je suis actuellement bloqué la dessus, j'espère que vous m'aiderez, mon problème est le suivant :

    Je dois écrire en PL/SQL, une requette SQL qui fait une recherche (une sorte de moteur de recherche) sur plusieurs tables (au moins 8 => plusieurs jointures) sur des champs qui peuvent être NULL, vide, pleins ... je ne dois récupérer que la liste des id de la table mère (ROOT), voilà comment j'ai fait mais ça n'a pas marché :

    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
    19
    20
    21
    22
    23
    24
    SELECT tableRoot.Id 
      FROM  table_root tableRoot,
            table_fille1 fille1,
            table_fille2 fille2,
            table_fille3 fille3,
            table_fille4 fille4,
            ...
            WHERE 
              tableRoot.champRoot1 LIKE '%i__var1%' AND
              tableRoot.champRoot2 = i__var2 AND
              tableRoot.champRoot3 = i__var3 AND 
              fille1.champfille1_1  = i__var4  AND
              fille1.champfille1_2 = i__var5  AND
              fille2.champfille2 LIKE   '%i__var6 %' AND
              fille3.champfille3 LIKE   '%i__var7 %' AND
              fille4.champfille4_1  LIKE   '%i__var8 %' AND
              fille4.champfille4_2  LIKE '%i__var9 %' AND
              ...
              -- Inner joins
              fille1.id = tableRoot.fk_id_1 AND
              fille2.id = tableRoot.fk_id_2 AND
              fille3.id = tableRoot.fk_id_3 AND
              fille4.id = tableRoot.fk_id_4
              ...;
    Merci bcp,

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    peux tu donner un peu plus de détails?
    qu'est ce qui ne fonctionne pas?
    un petit exemple peut être en réduisant à une table fille pour nous montrer ce que tu veux réellement et ce qui te pose problème?

    Merci

    Michel

  3. #3
    Membre régulier Avatar de anas.eh
    Profil pro
    Inscrit en
    Février 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2007
    Messages : 181
    Points : 119
    Points
    119
    Par défaut
    Merci pour votre réponse,

    Déjà la première question qui se pose : est-ce que je suis sur le bon chemin, est-ce la méthode à suivre ? y'aurais pas de problèmes de chute de performances, si une information n'existe pas au niveau d'une table auquel on a fai une jointure, cela ne va pas influencer sur la requette, bref vous voyez des problématiques dans cette méthode ?

    Merci,

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    déjà, niveau performance, il faudra que tu utilises des index

    après sans plus d'informations, il est difficile de t'en dire plus.

    bon courage

  5. #5
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par Cybher Voir le message
    salut,

    déjà, niveau performance, il faudra que tu utilises des index

    après sans plus d'informations, il est difficile de t'en dire plus.

    bon courage
    des indexes avec des like '%...', aucun interet !!!

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Je pense que Cybher parlait d'index pour les champs des jointures.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 896
    Points : 53 126
    Points
    53 126
    Billets dans le blog
    6
    Par défaut
    Votre requête suppose que l'information existe SIMULTANÉMENT dans toutes les tables. SI vous voulez retrouver les données si l'information existe au moins dans une table, il faut le faire à l'aide de jointures externe OUTER JOIN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  tableRoot.Id 
    FROM    table_root AS R
            LEFT OUTER JOIN table_fille1 AS F1
                 ON  R.fk_id_1 = f1.id AND F1.champfille1_1  = i__var4
    ...
    WHERE   R.champRoot1 LIKE '%i__var1%' AND
            R.champRoot2 = i__var2 AND
            R.champRoot3 = i__var3
    A +

Discussions similaires

  1. Recherche sur plusieures tables en PL/SQL
    Par anas.eh dans le forum PL/SQL
    Réponses: 2
    Dernier message: 17/09/2008, 14h57
  2. sql recherche sur plusieurs table / commande IN
    Par Tonio13006 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/05/2008, 14h29
  3. Recherche sur plusieurs tables
    Par micatmidog dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/06/2007, 16h28
  4. [MySQL] moteur de recherche sur plusieurs tables
    Par harlock59 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/04/2007, 15h23
  5. [MySQL] Recherche sur plusieurs tables
    Par hubidev dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/03/2006, 10h42

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