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

ODI (ex-Sunopsis) Discussion :

Problème jointure externe (LEFT JOIN et pas (+))


Sujet :

ODI (ex-Sunopsis)

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut Problème jointure externe (LEFT JOIN et pas (+))
    Bonjour,

    Je travaille avec ODI et des bases oracles.
    J'ai un problème avec les jointures externe réalisées par ODI, qui utilise les (+) dans le WHERE de ma commande SQL.

    Dans mon interface, j'ai besoin que deux tables différentes pointent toutes les deux vers une troisième table en jointure externe. (remarque : mes deux première tables sont par ailleurs liées entre elles)
    Ce genre d'interface ODI génère le code suivant, dans cet exemple ou j'ai trois tables :

    Les deux lignes en gras sont celles qui créées l'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT mes champs
    FROM table_1, table_2, table_3
    WHERE table_1.clejointure = table_2.clejointure
    AND table_3.clejointure2 (+) = table_1.clejointure2
    AND table_3.clejointure2 (+) = table_2.clejointure2
    J'obtiens à l'exécution l'erreur oracle suivante :
    ORA-01417: une table ne peut être de jointure externe que pour une seule table
    Alors que si je fais la requête moi même en utilisant un left join, cela fonctionne. Voici la requête que je créé moi même, équivalente, et qui ne pose pas de problème à oracle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT mes champs
    FROM table_1
    INNER JOIN table_2 on table_1.clejointure = table_2.clejointure
    LEFT JOIN table_3 on (table_3.clejointure2 = table_1.clejointure2 AND table_3.clejointure2 = table_2.clejointure2
    Est il possible de forcer ODI à utiliser la syntaxe en left join.
    Ou y a t'il un moyen de contourner ce problème lorsqu'on veut joindre trois tables ensemble avec deux jointures externe en provenance de deux tables différentes vers une même table ?

    Merci,
    Tata

  2. #2
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Bonjour,

    Personnellement j'avoue ne pas comprendre pourquoi cette double jointure externe sur 2 tables.

    La jointure entre table 1 et table 2 renvoi les lignes communes entre les deux tables. Donc ne suffit il pas juste de faire une jointure externe entre la 3ieme table et la table 1 ou 2 ?

    Sinon Je pense qu'il te faut passer par une étape intermédiaire , comme une vue par exemple avec table 1 et table 2 , ou une table temporaire.

Discussions similaires

  1. Problèmes jointures externes
    Par B&B dans le forum SQL
    Réponses: 4
    Dernier message: 30/09/2008, 12h24
  2. Réponses: 3
    Dernier message: 29/10/2007, 13h04
  3. Problème sur un left join en version 4 mais pas en 5 !
    Par Christophe Charron dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/05/2007, 20h45
  4. Problème jointures externes BO
    Par leelee dans le forum Designer
    Réponses: 1
    Dernier message: 17/03/2007, 09h29
  5. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 12h26

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