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 :

[Access 2000] LEFT JOIN un peu complexe


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Par défaut [Access 2000] LEFT JOIN un peu complexe
    Bonjour,
    Je dois faire une requête portant sur 6 tables (pour l'instant parce qu'après, je devrai en intégrer 3 autres. M'enfin, ça, c'est pour plus tard).
    Pour chaque dossier, je veux toutes les infos des autres tables, sachant que les autre stables n'ont peut-êter pas les infos.
    Voilà ce que je voulais faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FROM ((DOSSIER D LEFT JOIN PERSONNES P ON D.id_personne = P.id_personne)
    LEFT JOIN PARAM_TYPE_DEMANDE PTD ON D.id_type_demande = PTD.id_type_demande) 
    LEFT JOIN (DOSSIER_PARCELLE DPA 
    LEFT JOIN (PARCELLES PA LEFT JOIN LIEUDIT L ON PA.id_lieudit = L.id_lieudit )
    ON DPA.id_parcelle = PA.id_parcelle) 
    ON D.id_dossier = DPA.id_dossier
    Bon, rien n'était sélectionné. J'ai donc procédé en ajoutant table par table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM DOSSIER D LEFT JOIN PERSONNES P ON D.id_personne = P.id_personne
    ==> OK, ça roule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM (DOSSIER D LEFT JOIN PERSONNES P ON D.id_personne = P.id_personne)
    LEFT JOIN PARAM_TYPE_DEMANDE PTD ON D.id_type_demande = PTD.id_type_demande
    ==> Ok, ça roule toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FROM ((DOSSIER D LEFT JOIN PERSONNES P ON D.id_personne = P.id_personne)
    LEFT JOIN PARAM_TYPE_DEMANDE PTD ON D.id_type_demande = PTD.id_type_demande) 
    LEFT JOIN DOSSIER_PARCELLE DPA ON D.id_dossier = DPA.id_dossier
    Et là, c'est le drame! Plus rien n'est sélectionné, sachant qu'il existe bien la table DPA avec les champs cités et que ces derniers sont renseignés.
    J'ai bien essayé d'inverser la jointure LEFT avec cette table ou même de même un FULL mais toujours rien.
    Là je vois aps. Vous avez une idée?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Par défaut
    Salut,

    Je te conseil de supprimer les parenthèses.

    De plus peut tu donner la requête exacte. Si par exemple tu as un WHERE ...

  3. #3
    Membre éclairé

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Par défaut
    Ma requête en entier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT D.id_dossier, 
                   D.reference, 
                   D.reference_daf,
                   P.nomcomplet_personne, 
                   PTD.type_demande 
    FROM DOSSIER D LEFT JOIN PERSONNES P ON D.id_personne = P.id_personne
                   LEFT JOIN PARAM_TYPE_DEMANDE PTD ON D.id_type_demande = PTD.id_type_demande  
                   LEFT JOIN DOSSIER_PARCELLE DPA  LEFT JOIN PARCELLES PA LEFT JOIN LIEUDIT L ON PA.id_lieudit = L.id_lieudit ON DPA.id_parcelle = PA.id_parcelle ON D.id_dossier = DPA.id_dossier
    WHERE D.id_dossier <> 0  
    ORDER BY D.id_dossier ;
    Les parenthèses ne sont pas nécessaires pour garder les relations entre les tables?

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Quel est ton moteur de base de données (ce ne serait pas ACCESS par hasard ?)

  5. #5
    Membre éclairé

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Par défaut
    Médiat ==> Euuuh... Oui. Access 2000. Parce que je ne l'ai pas posté au bon endroit? (c'est une question de syntaxe SQL pourtant)
    Si c'est pour savoir comment je lance cette requête, c'est avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.lstResultats.RowSource = SQL
    Me.lstResultats.Requery

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Non, c'est surtout que je crois qu'ACCESS réclame ces fameuses parenthèses qui rendent la requête illisible. Et puis je n'ai pas ACCESS pour faire des tests et t'aider intelligemment

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Par défaut
    Citation Envoyé par Miss Ti
    Les parenthèses ne sont pas nécessaires pour garder les relations entre les tables?
    en effet je ne l'entendais pas comme çà, mais plutot :

    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
     
     
    SELECT D.id_dossier, 
                   D.reference, 
                   D.reference_daf,
                   P.nomcomplet_personne, 
                   PTD.type_demande 
    FROM DOSSIER D LEFT JOIN PERSONNES P 
    ON D.id_personne = P.id_personne
    LEFT JOIN PARAM_TYPE_DEMANDE PTD 
    ON D.id_type_demande = PTD.id_type_demande  
    LEFT JOIN DOSSIER_PARCELLE DPA  
    ON D.id_dossier = DPA.id_dossier
    LEFT JOIN PARCELLES PA 
    ON DPA.id_parcelle = PA.id_parcelle 
    LEFT JOIN LIEUDIT L 
    ON PA.id_lieudit = L.id_lieudit 
    WHERE D.id_dossier <> 0  
    ORDER BY D.id_dossier ;

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

Discussions similaires

  1. SQL LEFT JOIN et formulaires Access
    Par AceSonyx dans le forum Access
    Réponses: 5
    Dernier message: 16/06/2014, 09h11
  2. Réponses: 4
    Dernier message: 22/04/2013, 12h00
  3. Access 2000 - plusieurs inner join
    Par kekesilo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 02/04/2008, 18h36
  4. [Access] Requête avec LEFT JOIN et 3 tables
    Par estelledany dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/06/2006, 13h27
  5. [Access 2000] Faire un INNER JOIN derrière un LET JOIN
    Par Korskarn dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/03/2006, 11h51

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