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 :

Help sur Jointure EXTERNE


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Help sur Jointure EXTERNE
    Bonjour,

    J'essaie de faire une requête tout con nécéssitant une jointure externe mais je n'arrive pas au résultat.

    Voici le topo :

    J'ai une table 'Structure' qui contient des structures identiées par un code_structure(clé) et un structure_name qui identifie le type. J'ai une autre table ' structure_dep' qui définit les dépendance entre type de structure.

    Ma requête doit me ramener toute les structures de types A ainsi que les structures de types 'B' quand elles existent.

    Voici la requête que j'ai faite mais qui ne me ramene que les correspondances

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select 
        s1.DESCRIPTION as Filtre , 
        s2.DESCRIPTION as domaine 
    from 
        structure s1,  
        structure s2,         
         structure_dep crit 
    where 
        s1.STRUCTURE_NAME='B' 
        and crit.FATHER_CODE = s1.STRUCTURE_CODE
        and  s2.STRUCTURE_NAME = 'A'
        and crit.LINKED_CODE(+)   = s2.STRUCTURE_CODE
    Merci de votre aide

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    En écrivant les jointures de manière normalisée avec la syntaxe JOIN, on y arrive beaucoup plus clairement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT s1.DESCRIPTION AS Filtre, s2.DESCRIPTION AS domaine 
    FROM structure s1
    LEFT JOIN structure_dep crit ON crit.FATHER_CODE = s1.STRUCTURE_CODE
        LEFT JOIN structure s2 ON crit.LINKED_CODE = s2.STRUCTURE_CODE 
    WHERE s1.STRUCTURE_NAME='B' AND  s2.STRUCTURE_NAME = 'A'
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    C'est plus clair mais cela me donne toujours le même résultat, à savoir que les domaines qui ont un filtre associé

    Merci de ta réponse

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Revenons à la demande de départ :
    Ma requête doit me ramener toute les structures de types A ainsi que les structures de types 'B' quand elles existent.
    C'est probablement à cause du WHERE qui impose les deux conditions.
    Il faut peut-être faire la jointure sur le sous-ensemble des filtres de type B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT s2.DESCRIPTION AS domaine, s1.DESCRIPTION AS Filtre,  
    FROM structure s2
    LEFT JOIN structure_dep crit ON crit.LINKED_CODE = s2.STRUCTURE_CODE
        INNER JOIN (
            SELECT s1.DESCRIPTION, s1.STRUCTURE_CODE
            FROM structure s1 
            WHERE s1.STRUCTURE_NAME='B'
        ) tmp ON crit.FATHER_CODE = tmp.STRUCTURE_CODE 
    WHERE s2.STRUCTURE_NAME = 'A'
    Sinon tu es sûr que tes conditions de jointure sont dans le bon ordre (FATHER et LINKED) ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Le résultat est le même. Oui je suis sur de mes relations, j'ai inversé pour être sur. le lien de type B est bien sur le champs FATHER_CODE et celui de type A est le LINKED_CODE.

    Elle commence a me prendre la tete cette requete.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Essayez celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT 
        sA.DESCRIPTION AS domaine, 
        sB.DESCRIPTION AS filtre
    FROM 
        structure sA
        LEFT OUTER JOIN structure_dep sd
          ON sd.LINKED_CODE = sA.STRUCTURE_CODE
        LEFT OUTER JOIN structure sB
          ON sB.STRUCTURE_CODE = sd.FATHER_CODE
         AND sB.STRUCTURE_NAME = 'B' 
    WHERE
        sA.STRUCTURE_NAME = 'A'
    Avec les (+) ça donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT 
        s1.DESCRIPTION AS Filtre , 
        s2.DESCRIPTION AS domaine 
    FROM 
        structure s1,  
        structure s2,         
        structure_dep crit 
    WHERE 
        s1.STRUCTURE_NAME(+)='B' 
    AND crit.FATHER_CODE = s1.STRUCTURE_CODE(+)
    AND s2.STRUCTURE_NAME = 'A'
    AND crit.LINKED_CODE(+) = s2.STRUCTURE_CODE

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Nickel, le résultat m'a l'air juste,

    Merci beaucoup de votre aide

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

Discussions similaires

  1. Bugs sur jointures externes corrigés en 01F170069g
    Par Arnaud B. dans le forum HyperFileSQL
    Réponses: 10
    Dernier message: 06/04/2012, 02h32
  2. condition sur jointure externe gauche
    Par paolo2002 dans le forum Développement
    Réponses: 0
    Dernier message: 21/06/2010, 15h47
  3. Aide sur jointure externe
    Par viny dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/09/2006, 16h51
  4. Réponses: 2
    Dernier message: 22/04/2005, 16h44

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