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 :

Problème : jointure externe avec une table alias


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 51
    Points : 32
    Points
    32
    Par défaut Problème : jointure externe avec une table alias
    J'ai un problème en utilisant la jointure externe avec une table alias.
    En faite, la jointure externe ne fonctionne pas correctement si je utilise la même table.
    Ex:

    select t1.id1, t1.id2, t1.value, t2.value
    from table t1, table t2
    where t1.an = 2007 and
    t2.an = 2006 and
    t1.id1 = t2.id1 (+) and
    t1.id2 = t2.id2 (+)
    order by t1.id1, t1.id2

    Le résultat de cette requête est exactement identique à celle de la jointure interne.

    En plus, Je suis sûre qu'il y plus de données en 2007 qu'en 2006.

    C'est peut-être à cause de la clè multiple? Quelq'un peut m'aider SVP?

    Merci par avance.

  2. #2
    Membre habitué Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Points : 196
    Points
    196
    Par défaut
    C'est à cause de la condition sur ta 2ème table qui n'est pas optionnelle, transformant ton outer join en join normal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     select t1.id1, t1.id2, t1.value, t2.value
    from table t1, table t2
    where t1.an = 2007 and
              t2.an = 2006 and
             t1.id1 = t2.id1 (+) and
             t1.id2 = t2.id2 (+)
    order by t1.id1, t1.id2
    Tu as 2 solutions possibles:

    Tu veux afficher les enregistrement de la 1ère table n'ayant pas de correspondance avec la 2ème et ceux dont la correspondance existe, il faut nécessairement que la condition 2006 soit respecté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     select t1.id1, t1.id2, t1.value, t2.value
    from table t1, table t2
    where t1.an = 2007 and
    (t2.an is null or t2.an = 2006) and
             t1.id1 = t2.id1 (+) and
             t1.id2 = t2.id2 (+)
    order by t1.id1, t1.id2
    Par exemple, si tu as un ID sur 2007 mais que ton ID existe en 2005 mais pas en 2006, la ligne de 2007 ne sera pas ramené

    Ou bien tu veux afficher toutes les lignes de ta 1ère table et afficher uniquement les correspondances suivant un critère de filtre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select t1.id1, t1.id2, t1.value, t2.value
    from table t1, (select * from table where an = 2006) t2
    where t1.an = 2007 and
    t1.id1 = t2.id1 (+) and
             t1.id2 = t2.id2 (+)
    order by t1.id1, t1.id2
    Ainsi, tu auras vraiment toutes les lignes de ta table sur l'année 2007 et des infos supplémentaire dans le cas où tu retrouves l'ID en 2006

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 51
    Points : 32
    Points
    32
    Par défaut Problème résolu : jointure externe avec une table elle même
    Merci beaucoup. C'est vraiment utile pour moi.

  4. #4
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select t1.id1, t1.id2, t1.value, t2.value
    from table t1, table t2
    where t1.an = 2007 and
    2006 = t2.an (+) and
             t1.id1 = t2.id1 (+) and
             t1.id2 = t2.id2 (+)
    order by t1.id1, t1.id2
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

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

Discussions similaires

  1. Double jointure externe sur une table
    Par astridette dans le forum SQL
    Réponses: 2
    Dernier message: 30/03/2012, 13h33
  2. Réponses: 9
    Dernier message: 13/03/2010, 10h38
  3. Réponses: 6
    Dernier message: 19/03/2007, 20h04
  4. Jointures externes sur une table de jointure
    Par mart1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/10/2006, 01h33
  5. [SQL] jointure externe avec 3 tables, comment faire ....
    Par grumbok dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/08/2005, 16h13

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