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 :

Outer Join multiples


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Par défaut Outer Join multiples
    Bonjour,

    Je développe sous Access 2003 une application d'évaluation des connaissances des techniciens sur les équipements exploités. Ces techniciens sont associés à un site et une fonction de rattachement. Dans une partie d'analyse de l'outil, je souhaite générer une requête (utilisée en source d'un tableau croisé dynamique Excel) m'indiquant les techniciens par sites et par fonctions, en incluant les sites et les fonctions sans personnel rattaché. Je voudrais donc faire une requete qui peut se résumer ainsi :
    - Afficher les données sur les utilisateurs, les sites et les fonctions pour les utilisateurs rattachés à un site particulier et une fonction particulière
    et aussi afficher les données sur les sites et les fonctions sans personnel rattaché

    Un schéma pour bien poser la problématique

    Table_Site --- Table_Personnel --- Table_Fonction


    Table_Personnel
    N°_Personnel N°_Site N°_Fonction infos_personnel
    1 1 1 aaa
    2 1 2 bbb
    3 2 1 ccc


    Table_Site
    N°_Site infos_site
    1 ddd
    2 eee
    3 fff


    Table_Fonction
    N°_Fonction infos_fonction
    1 ggg
    2 hhh
    3 iii


    Résultat souhaité de la requête (utilisée en source du tableau croisé dynamique) :
    N°_Personnel infos_personnel infos_site infos_fonction
    1 aaa ddd ggg
    2 bbb ddd hhh
    3 ccc eee ggg
    Null Null fff Null
    Null Null Null iii

    J'ai essayé :
    - de combiner deux left join dans une seule requête : ça ne marche pas (expression de jointure non supportée)
    - de bidouiller une full outer join à partir de deux requetes liées par un "UNION", ces deux requêtes faisant elles-memes des left join entre site et personnel d'une part, fonction et personnel d'autre part, ça ne marche pas (erreur dans la clause FROM)

    Voilà, si quelqu'un a une idée, merci d'avance... Sinon, merci quand même d'avoir lu mon post

  2. #2
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    salut ptite_bebete et bienvenu,

    tu ne peux logiquement pas crée ainsi une double jonction left car les jonctions se font d'une table/requete à vers une autre or lorsque tu feras ta deuxième jonction tu créera avec les n enregistrements non présent dans première jonction, une jonction avec les enregistrements de la troisième table qui n'ont rien avoir: n enregistrements non présent dans 1 jonction x n enregistrements dans la troisième table.

    il te faut découper en trois étape: ceux présent dans tous+ ceux manquant dans la deuxième table+ceux manque dans la troisième table.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT Table_Personnel.N°_Personnel, Table_Personnel.infos_personnel, Table_Site.infos_site, Table_Fonction.infos_fonction
    FROM (Table_Personnel INNER JOIN Table_Site ON Table_Personnel.N°_Site = Table_Site.N°_Site) INNER JOIN Table_Fonction ON Table_Personnel.N°_Fonction = Table_Fonction.N°_Fonction
    UNION
    SELECT null as N°_Personnel,null as infos_personnel,Table_Site.infos_site,null as infos_fonction
    FROM Table_Personnel RIGHT JOIN Table_Site ON Table_Personnel.N°_Site = Table_Site.N°_Site
    WHERE Table_Personnel.N°_Site Is Null
    UNION
    SELECT null as N°_Personnel, null as infos_personnel, null as infos_site, Table_Fonction.infos_fonction
    FROM Table_Personnel RIGHT JOIN Table_Fonction ON Table_Personnel.N°_Fonction = Table_Fonction.N°_Fonction
    WHERE Table_Personnel.N°_Fonction Is Null

Discussions similaires

  1. Outer Join multiples sous Access 2003
    Par ptite_bebete dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/06/2008, 22h49
  2. [9i] Multiple Left Outer Join
    Par An0d dans le forum Oracle
    Réponses: 6
    Dernier message: 13/02/2007, 12h29
  3. Remplacer FULL OUTER JOIN
    Par funrighd dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2004, 10h54
  4. probleme avec OUTER / OUTER JOIN
    Par Volcomix dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 21/04/2004, 16h57
  5. [ requeste sql ]INNER JOIN / OUTER JOIN
    Par hocinema dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/04/2004, 21h28

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