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

SQL Oracle Discussion :

Double jointure externe


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut Double jointure externe
    Bonjour à tous ,

    Alors mon souci est que je n'arrive pas à faire une double jointure externe.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Select lb_last_name,lb_given_name,dt_compte_rendu,lb_activite ,lb_ss_activite,lb_projet,lb_application
    From tr_activite B, tr_sous_activite C , vw_employe D,
    tf_compte_rendu a left outer join tr_projet F on a.cd_projet = f.cd_projet,
    tf_compte_rendu a left outer join tr_application G on a.cd_application = g.cd_application
    WHERE a.cd_activite= b.cd_activite 
    AND a.cd_ss_activite= c.cd_ss_activite
    AND a.cd_login= d.cd_login
    AND a.dt_compte_rendu < sysdate
    AND cd_compte_rendu in (SELECT Max(cd_compte_rendu) from tf_compte_rendu WHERE cd_login = 'login')
    GROUP by lb_last_name,lb_given_name,dt_compte_rendu,lb_activite,lb_ss_activite,lb_projet,lb_application
    Explication: base de plusieurs tables , lb_application et lb_projet peuvent être nul donc on m'a dirigé vers une jointure externe , j'arrive à en faire une mais deux cela me donne une erreur:

    column ambiglious definided

    Si il vous manque des informations pour comprendre mon problème n'hésitez pas.

    Merci d'avoir mon lu mon post.

    Cordialement.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Points : 60
    Points
    60
    Par défaut
    Cela ressemble a un probleme d'alias manquant.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut
    C'est à dire?

  4. #4
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Points : 126
    Points
    126
    Par défaut
    Bonjour,

    A mon avis, le probleme est que tu utilises l'alias "a" dans les 2 jointures pour representer la table tf_compte_rendu. Donc quand tu fais reference a une colonne de cette table (dans le where par exemple), Oracle ne sait laquelle il doit utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT lb_last_name,lb_given_name,dt_compte_rendu,lb_activite ,lb_ss_activite,lb_projet,lb_application
    FROM tr_activite B, tr_sous_activite C , vw_employe D,
    tf_compte_rendu a LEFT OUTER JOIN tr_projet F ON a.cd_projet = f.cd_projet,
    tf_compte_rendu a LEFT OUTER JOIN tr_application G ON a.cd_application = g.cd_application
    WHERE a.cd_activite= b.cd_activite 
    AND a.cd_ss_activite= c.cd_ss_activite
    AND a.cd_login= d.cd_login
    AND a.dt_compte_rendu < sysdate
    AND cd_compte_rendu IN (SELECT Max(cd_compte_rendu) FROM tf_compte_rendu WHERE cd_login = 'login')
    GROUP BY lb_last_name,lb_given_name,dt_compte_rendu,lb_activite,lb_ss_activite,lb_projet,lb_application

  5. #5
    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
    Utilisez complètement les jointures ANSI.
    Vous répétez deux fois la même table dans from, ce qui est faux :
    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
      select lb_last_name, lb_given_name, dt_compte_rendu, lb_activite, lb_ss_activite, lb_projet, lb_application
        from tf_compte_rendu a
             inner join tr_activite b
               on b.cd_activite = a.cd_activite
             inner join tr_sous_activite c
               on c.cd_ss_activite = a.cd_ss_activite
             inner join vw_employe d
               on d.cd_login = a.cd_login
             left outer join tr_projet f
               on f.cd_projet = c.cd_projet
             left outer join tr_application g
               on g.cd_application = a.cd_application
       where a.dt_compte_rendu < sysdate
         and cd_compte_rendu = (select max(cd_compte_rendu)
                                  from tf_compte_rendu
                                 where cd_login = 'login')
    group by lb_last_name, lb_given_name, dt_compte_rendu, lb_activite, lb_ss_activite, lb_projet, lb_application;
    Dès que vous avez plus d'une table, toutes vos colonnes doivent utiliser les alias de table. En lisant votre requête, on ne sait pas quelle colonne appartient à quelle table. Si c'est clair pour vous aujourd'hui, pensez au développeur qui devra faire une modification dans quelques années.

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

Discussions similaires

  1. Effectuer une "double" jointure externe
    Par sat83 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/07/2013, 13h31
  2. Double jointure externe sur une table
    Par astridette dans le forum SQL
    Réponses: 2
    Dernier message: 30/03/2012, 13h33
  3. Double jointure externe
    Par Djakisback dans le forum Langage SQL
    Réponses: 10
    Dernier message: 01/02/2008, 16h45
  4. requete avec double jointure externe
    Par cdu dans le forum Langage SQL
    Réponses: 8
    Dernier message: 04/01/2006, 14h54
  5. Doubles jointures externes....
    Par HPJ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/11/2004, 15h28

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