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 avec plusieurs tables liées


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 506
    Par défaut Requête avec plusieurs tables liées
    Bonjour,

    Dans ma base de données, j'ai des tables liées "en escalier" de cette façon :

    Nom : bdd.jpg
Affichages : 110
Taille : 43,8 Ko

    Je cherche à écrire une requête qui me récupère les champs de la table 3 pour lesquels l'enregistrement lié dans la table 1 a pour valeur champ1="une valeur"
    J'ai réussi en faisant une requête avec des LEFT JOIN SELECT imbriqués en cascade :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT *
    FROM Table3
    LEFT JOIN (SELECT *
                FROM Table2
                LEFT JOIN (SELECT *
                            FROM Table1
                            ON Table1.id = Table2.id_table1)
                ON Table2.id = Table3.id_table2)
    WHERE Table1.champ1='une valeur'
    Mais ça devient vite compliqué quand on a beaucoup de champs, et plus que 3 tables impliquées dans la requête...

    Est-ce qu'il n'y aurait pas une solution plus simple?


    Merci,
    Nico

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 389
    Par défaut
    Bonjour,
    Pourquoi aussi complexe ? J'ai mal compris ou il y a beaucoup plus simple ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT t3.*
    FROM table3 AS t3
    INNER JOIN table2 AS t2 ON t2.id = t3.id_table2
    INNER JOIN table1 AS t1 ON t1.id = t2.id_table1
    WHERE t1.champ1 = 'une valeur';


    Cdt,
    Un problème sans solution est un problème mal posé. (Albert Einstein)

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 485
    Par défaut
    Bonjour,
    Il ne faut pas utiliser de sous requête,mais faire les jointures "directement":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Select *
    From Table as t1
    Left Outer Join Table2 as t2 on t1.id = t2,idt1
    Left Outer Join...
    Left Outer Join...
    Where...
    Le select * est ici par "facilité", il convient de spécifier les colonnes que la requête doit renvoyer.
    Attention également : un filtre dans la clause Where sur une table à droite d'un Left Outer Join "transforme" ce dernier en Inner Join.
    Le critère en question doit être dans la jointure.

    Tatayo.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 682
    Billets dans le blog
    10
    Par défaut
    Notez aussi que les champs sont les zones de saisie à l'écran ou les zones d'édition d'un état, dans les tables, il n'y a pas de champs, mais des colonnes

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 506
    Par défaut
    Effectivement plus simple !
    et plus rapide

    Merci,
    Nico

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

Discussions similaires

  1. Requête : Insert avec plusieurs tables
    Par bleu_ciel dans le forum Access
    Réponses: 4
    Dernier message: 01/06/2006, 22h42
  2. [VB 2005]Dataset avec plusieurs tables
    Par estelledany dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/05/2006, 15h25
  3. Optimisation d'une base avec des tables liés
    Par snoopy69 dans le forum Access
    Réponses: 2
    Dernier message: 28/04/2006, 10h11
  4. [MySQL] requete avec liaisons avec plusieurs tables
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 10/03/2006, 23h21
  5. historique avec plusieurs table
    Par Cybher dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/08/2005, 17h38

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