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 et SQL. Discussion :

Requete avec inner join en série


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 49
    Points
    49
    Par défaut Requete avec inner join en série
    Bonjour et merci d'avance pour votre aide.

    Alors voilà je voudrais faire une 1ere grosse requête pour éviter lors d'un futur traitement VBA de multiplier les requêtes pour avoir tous les infos dont j'ai besoin pour faire un énorme tableau sous Excel.


    J’ai 3 tables :
    Patient, Professionnel, Commune

    Dans la table Patient il y a 2 clés étrangère pour 2 Pro distinct qui corresponde a une relation 0-1
    Il y a aussi une clé étrangère pour la Commune (cette fois relation 1-1)

    Dans la table Professionnel il y a aussi une clé étrangère pour la Commune (relation 1-1, clé ID_COMMUNE_PRO)


    Dans ma requête j'ai besoin d'infos de la table patient (pour tous les patients donc LEFT JOIN), de la commune du patient mais aussi du nom de chacun des pro des 2 clé étrangère et de leur commune respective aussi.

    J'arrive a avoir la commune du patient car le lien est "direct" mais pour avoir aussi les communes des 2 pro la je bataille sec.

    Ce qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT PATIENT.NumeroPatientAssoc, PROFESSIONNEL.NomProfessionnel, PROFESSIONNEL_1.NomProfessionnel, COMMUNE.CP_Commune
    FROM COMMUNE INNER JOIN ((PATIENT LEFT JOIN PROFESSIONNEL ON PATIENT.Responsable_inclusion = PROFESSIONNEL.ID_PROFESSIONNEL) 
    LEFT JOIN PROFESSIONNEL AS PROFESSIONNEL_1 ON PATIENT.Medecin_traitant = PROFESSIONNEL_1.ID_PROFESSIONNEL) 
    ON COMMUNE.ID_COMMUNE = PATIENT.ID_COMMUNE_PATIENT;
    Sans parenthèse Access n'en veut pas.

    je voudrais donc rajouter la commune de PROFESSIONNEL et de PROFESSIONNEL_1 mais Access m'envoi chi** a chaque fois (écriture incorrect, jointure ambiguë ou impossible)


    en gros je voudrais savoir comment on fait des "jointure de jointure" quand cela dépasse il y a 3 tables ou plus qui se suive (A-> B-> C-> D ...)

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 43
    Points
    43
    Par défaut
    A 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
    17
    18
    19
    20
     
    SELECT
      PATIENT.NumeroPatientAssoc, COMMUNE.CP_Commune, PROFESSIONNEL.NomProfessionnel, COMMUNE_1.CP_Commune, PROFESSIONNEL_1.NomProfessionnel, COMMUNE_2.CP_Commune
    FROM
      (((((PATIENT 
      LEFT JOIN
      COMMUNE
      ON PATIENT.ID_COMMUNE_PATIENT=COMMUNE.ID_COMMUNE)
        LEFT JOIN
        PROFESSIONNEL
        ON PATIENT.Responsable_inclusion=PROFESSIONNEL_ID_PROFESSIONNEL)
          LEFT JOIN
          COMMUNE AS COMMUNE_1
          ON PROFESSIONNEL.<id_commune_professionnel>=COMMUNE_1.ID_COMMUNE)
            LEFT JOIN
            PROFESSIONNEL AS PROFESSIONNEL_1
            ON PATIENT.Medecin_traitant = PROFESSIONNEL_1.ID_PROFESSIONNEL)
              LEFT JOIN
              COMMUNE AS COMMUNE_2
              ON PROFESSIONNEL_1.<id_commune_professionnel>=COMMUNE_2.ID_COMMUNE);
    Il faut remplacer <id_commune_professionnel> par le nom du champ de la table PROFESSIONNEL qui contient la clé vers ta table COMMUNE.

    En espérant que cela t'aide,

    waici

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 49
    Points
    49
    Par défaut
    merci bien

    je viens de tester en remplacant <id_commune_professionnel> par ID_COMMUNE_PRO qui est donc la clé étrangère de la commune de professionnel.


    le message d'erreur de Access est : "Expression de jointure non supportée."

    dans l'aide de cette erreur on précise que : "L'instruction ON de votre opération JOIN est inachevée ou contient trop de tables. Vous pouvez mettre votre expression ON dans une clause WHERE."


    je suis sous Access 2003. Peut etre qu'il n'est pas possible de faire autant de jointure.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 49
    Points
    49
    Par défaut
    boon et bien pas de nouvelle réponse.


    On va faire des boucles alors



    Merci quand même

Discussions similaires

  1. Requete avec inner join sur une meme table
    Par mattmax dans le forum Développement
    Réponses: 1
    Dernier message: 15/12/2011, 14h34
  2. [JPA][EclipseLink] Requete avec Inner Join
    Par edertef dans le forum JPA
    Réponses: 1
    Dernier message: 20/07/2011, 11h46
  3. [MySQL] structure requete avec inner join
    Par Invité2 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/07/2011, 02h34
  4. Requete avec INNER JOIN
    Par Agité dans le forum Langage SQL
    Réponses: 0
    Dernier message: 05/11/2007, 14h15
  5. Probleme de requete avec Inner join
    Par illight dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/03/2007, 10h22

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