Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Cognos
Cognos Forum d'entraide Cognos : Impromptu, Powerplay, transformer,...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/12/2007, 13h48   #1
Membre confirmé
 
Inscription : juillet 2005
Messages : 403
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 403
Points : 269
Points : 269
Par défaut [Impromptu 7] Peut-on utiliser la syntaxe INNER JOIN avec Impromptu sous Oracle 9.2 ?

Bonjour à tous.

Le titre résume bien la question : quand je définis une jointure interne entre 2 tables, Impromptu la traduit par une égalité des champs dans la clause where de la requête.
N'est-il pas possible d'utiliser la syntaxe INNER JOIN ??

Ce qui est surprenant, c'est que dans la zone [Exceptions Joins] du fichier cogdmor.ini, j'ai une ligne :
Inner_Syntax=" INNER JOIN "

ce qui laisserait croire qu'Impromptu devrait utiliser cette syntaxe...(mais ce n'est pas le cas).
marchand_de_sable est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 14h05   #2
Membre éclairé
 
Inscription : juillet 2006
Messages : 212
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2006
Messages : 212
Points : 346
Points : 346
Quel est ton but ? que va t'apporter l'utilisation du Inner join à la place de l'égalité dans la clause where ?
brunolf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 16h45   #3
Membre confirmé
 
Inscription : juillet 2005
Messages : 403
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 403
Points : 269
Points : 269
Citation:
Envoyé par brunolf
que va t'apporter l'utilisation du Inner join à la place de l'égalité dans la clause where ?
En fait, je ne suis pas sûr

Je vais tenter d'expliquer mon soucis...
Mon catalogue mêle allegrement jointures internes et externes.
Imaginons que ma requête lie 3 tables de la manière suivante :
table_1 -> (interne) table_2
table_3-> (externe) table_2.

Ca me donne le code :
Code :
1
2
3
SELECT * FROM
table_3 t3 LEFT OUTER JOIN table_2 t2 ON t3.id=t2.fk_t3_id, table_1 t1
WHERE t2.id=t1.fk_t2_id
La clause WHERE exclu donc les enregistrements pour lesquels je n'ai pas de lien avec la table_2 (et donc avec la table_1).

Ce que j'aimerais, c'est obtenir le code :
Code :
1
2
3
SELECT * FROM table_3 t3 LEFT OUTER JOIN 
(table_2 t2 INNER JOIN table_1 t1 ON t2.id=t1.fk_t2_id)
ON t3.id=t2.fk_t3_id
Evidemment, rien ne m'assure qu'Impromptu fasse la jointure interne en priorité...mais si c'était le cas, ça m'arrangerait beaucoup !!
marchand_de_sable est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2007, 14h00   #4
Membre confirmé
 
Inscription : juillet 2005
Messages : 403
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 403
Points : 269
Points : 269
Je sais que mon raisonnement est un peu bancal...
mais personne ne peut me dire s'il est possible d'utiliser le INNER JOIN ??
(et si oui comment ?)
marchand_de_sable est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 11h36   #5
Membre éclairé
 
Inscription : juillet 2006
Messages : 212
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2006
Messages : 212
Points : 346
Points : 346
Pour les Inner join dans impromptu, à mon avis, c'est mort...

Citation:
Ce que j'aimerais, c'est obtenir le code :
Code :

Code :
1
2
3
SELECT * FROM table_3 t3 LEFT OUTER JOIN 
(table_2 t2 INNER JOIN table_1 t1 ON t2.id=t1.fk_t2_id)
ON t3.id=t2.fk_t3_id
La requête que tu veux obtenir correspond à ceci si on l'écrit "comme impromptu l'écrirait"

Code :
1
2
3
4
5
6
7
SELECT * 
FROM table_3 t3
,        (SELECT *  
          FROM table_2 t2
          ,        table_1 t1
          WHERE t2.id=t1.fk_t2_id ) AS sous_requete
WHERE t3.id = sous_requete.fk_t3_id (+)
=> à mon avis, tu n'as pas de solution pour faire ça avec Impromptu : Impromptu peut te générer des jointures entre tes tables, mais ce que tu veux faire correspond à joindre une table avec le résultat d'une requête : Impromptu ne sais pas le faire.

Il faudrait lui mâcher le travail en créant une vue BD avec ta sous requête, et dans impromptu, tu créé une jointure entre ta table T3 et t'a vue.
brunolf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 12h37   #6
Membre confirmé
 
Inscription : juillet 2005
Messages : 403
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 403
Points : 269
Points : 269
Je pense aussi que je demande l'impossible. D'autant qu'on peut mêler des jointures internes et externes de différentes manières, qui donneront des résultats différents selon les jointures traitées en priorité.

Par contre, ma curiosité reste sur sa faim quant au choix de la syntaxe utilisée par Impromptu pour les jointures.
L'exemple que tu me donnes utilise le (+) pour les jointures externes. Chez moi, Impromptu utilise le LEFT OUTER JOIN.
Le fichier cogdmor.ini spécifie bien :
Left_Eql=" LEFT OUTER JOIN "
Right_Eql=" RIGHT OUTER JOIN "

ainsi que
Inner_Syntax=" INNER JOIN "
Mais il utilise le " = " pour les jointures internes. J'avoue que je ne saisis pas bien pourquoi...

Cela dit, il m'a fallut passer à la syntaxe (+) car Oracle 9.2 ne sait pas correctement traiter les conditions de jointure avec des constantes. C'est à cette occasion que j'ai du me frotter au fichier cogdmor.ini, et j'avoue que nombre de parmètres sont obscurs.
Si tu sais où trouver un descriptif de l'ensemble des paramètres, ça m'intéresse, car la documentation fournie avec Impromptu est plutôt discrète sur le sujet.
marchand_de_sable est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 13h04   #7
Membre éclairé
 
Inscription : juillet 2006
Messages : 212
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2006
Messages : 212
Points : 346
Points : 346
Je doute que ce type de doc existe ... peut-être à demander au support Cognos ?
brunolf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 13h32   #8
Membre confirmé
 
Inscription : juillet 2005
Messages : 403
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 403
Points : 269
Points : 269
Arrff, j'y ai bien pensé, mais ma boîte n'a pas de n° client...
marchand_de_sable est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h53.


 
 
 
 
Partenaires

Hébergement Web