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

Requêtes MySQL Discussion :

Chercher une donnée via une table intermédiaire et multi jointure


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 29
    Points
    29
    Par défaut Chercher une donnée via une table intermédiaire et multi jointure
    Bonjour,
    mon problème à sûrement du déjà être traité, cependant je n'ai rien trouvé avec la recherche.

    J'ai une table eleve, une table commune et une table circonscription.
    Ma table eleve est relié à la table commune via le nom de la commune.
    Ma table circonscription est relié à ma table commune par le numéro de circo.

    Je voudrais avec les données élève, le nom de la commune et le nom de la circo.

    Actuellement, je n'arrive qu'à obtenir le numéro de la circo (clef primaire contenu dans la table commune).

    J'ai plusieurs jointure pour d'autres données.

    Voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * FROM `eleve` 
    LEFT JOIN `etab_sco` ON etab_sco.rne_etab = eleve.rne_etab 
    LEFT JOIN `referent` ON referent.numen_ref = eleve.numen_ref 
    LEFT JOIN `avs_gere_el` ON avs_gere_el.ine_el = eleve.ine_el 
    LEFT JOIN `commune` ON commune.commune = eleve.commune WHERE commune.rne_circo = ( 
    	  SELECT circonscription.rne_circo 
    	  FROM `circonscription` 
    	  WHERE commune.rne_circo = circonscription.rne_circo )
    J'arrive bien à avoir le nom de la circo avec cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT nom_el, circo
    FROM `eleve` E,`circonscription` C
    WHERE E.commune IN (
    	  SELECT COM.commune
    	  FROM `commune` COM
    	  WHERE COM.rne_circo=C.rne_circo)
    Je n'arrive pas à mixer les deux.

    Merci de votre aide.

  2. #2
    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 ne rajoutez-vous pas une nouvelle jointure à votre requete principale au lieu de passer par une sous-requete ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Comment faire une jointure entre deux table qui n'ont pas de clef primaire / étrangère en commun ?
    Ma table eleve n'est pas relié à la table circonscription, je passe par la table commune pour faire la liaison.

    Avec l'ancienne écriture WHERE, je savais le faire, mais avec JOIN ON, je ne sais pas.

    J'ai repris le SQL pour le boulot et mes connaissance date de mes étude, il y a presque 10 ans !

  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
    Dans votre 1ere requête vous avez déjà une jointure entre la table eleve et la table commune.

    Il suffit donc de rajouter une jointure entre la table commune et la table circonscription à la suite.


    Votre 2eme requete pourrait être ré-écrite comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT E.nom_el, C.circo
    FROM `eleve` E
    inner join `commune` COM on E.commune = COM.commune
    inner join `circonscription` C on  COM.rne_circo=C.rne_circo

    Lisez ceci : http://sqlpro.developpez.com/cours/sqlaz/jointures/#LV

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Si je la modifie comme ça, ça ne va pas, où est mon erreur syntaxique ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT * FROM `eleve` 
    LEFT JOIN `etab_sco` ON etab_sco.rne_etab = eleve.rne_etab 
    LEFT JOIN `referent` ON referent.numen_ref = eleve.numen_ref 
    LEFT JOIN `avs_gere_el` ON avs_gere_el.ine_el = eleve.ine_el 
    LEFT JOIN `commune` ON commune.commune = eleve.commune WHERE commune.rne_circo = ( 
    	  SELECT circonscription.rne_circo 
    	  FROM `circonscription` 
    	  WHERE commune.rne_circo = circonscription.rne_circo )
    INNER JOIN `circonscription` ON  commune.rne_circo = circonscription.rne_circo
    Merci pour vos réponses.


    Edit : Avec la partie "V-B. Arbre de jointure" de la doc, je commence à comprendre. Je reviens vers vous si ça ne fonctionne pas mieux demain. Merci !!!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 301
    Points
    301
    Par défaut
    Bonsoir,

    Je suis désolé de ne pas avoir le temps de lire votre problème et d'y répondre, mais je ne peux m'empêcher de répondre à cela :

    Comment faire une jointure entre deux table qui n'ont pas de clef primaire / étrangère en commun ?
    Une jointure et des clés (primaire et étrangère), cela n'a rien à voir même s'il est vrai que bien souvent les clés se trouvent dans la condition de jointure, d'où votre confusion.

    Pour réaliser une jointure entre 2 tables, il suffit que les 2 colonnes aient le même type (Int unsigned, VarChar(64), etc). C'est la seule condition.

    La clé étrangère est un mécanisme très différent dont le but est de mettre en oeuvre dans la BDD une contrainte qui garantisse l'intégrité des références.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Merci à tous, en lisant la doc, j'ai compris.

    Ma requête se présente ainsi et j'obtiens ce que je veux

    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
    SELECT *
    FROM `eleve`
    	LEFT JOIN `etab_sco`
    		ON etab_sco.rne_etab =  eleve.rne_etab 
    	LEFT JOIN `referent`
    		ON referent.numen_ref = eleve.numen_ref
    	LEFT JOIN  `avs_gere_el`
    		ON avs_gere_el.ine_el = eleve.ine_el
    		LEFT JOIN `avs`
    			ON avs_gere_el.id_avs = avs.id_avs
    	LEFT JOIN `commune`
    		ON commune.commune = eleve.commune 
    		LEFT JOIN `circonscription`
    			ON  commune.rne_circo = circonscription.rne_circo
    	ORDER BY nom_el ASC, prenom_el ASC;

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

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. [AC-2003] Lier les tables d'une Base1 dans une Base3 via une Base2
    Par ted the Ors dans le forum VBA Access
    Réponses: 0
    Dernier message: 30/12/2009, 11h58
  3. [E-03] Insérer une image via une donnée elle même insérée par une autre
    Par Blop le bricoleur dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 24/10/2008, 16h10
  4. Réponses: 2
    Dernier message: 17/04/2007, 17h14
  5. Réponses: 2
    Dernier message: 18/12/2006, 19h04

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