Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
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 29/03/2007, 12h01   #1
Membre du Club
 
Inscription : janvier 2006
Messages : 117
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 117
Points : 51
Points : 51
Par défaut Outer Join un peu tordu

Bonjour,

Voici ma requête :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
SELECT ap1.idtaflpln
     , jd1.idtlotjeu
     , pl1.idtpln
     , mtlafl
     , nomafl
     , prnafl
     , ve1.valelm
  FROM jeu_donnee jd1
     , affilie_plan ap1
     , affilie af1
     , PLAN pl1
     , valeur_element_mgc ve1
     , element_mgc el1
 WHERE jd1.idtaflpln = ap1.idtaflpln
   AND ap1.idtpln = pl1.idtpln
   AND af1.idtafl = ap1.idtafl
   AND ve1.idtjeudon = jd1.idtjeudon
   AND ve1.idtelm = el1.idtelm
   AND UPPER (el1.codcaltqe) = 'DTEENTAFL'
Je tente de sélectionner tous les "affilie_plan", d'indiquer certaines de leurs informations, et surtout la "valeur élément" (valelm) correspondant à l'élément dont UPPER (el1.codcaltqe) = 'DTEENTAFL'. J'aimerais aussi voir les "affilie_plan" qui n'ont PAS de DTEENTAFL, donc dans ce cas, le champ valelm serait affiché avec une valeur NULL.

J'ai tout essayé avec les (+), je ne m'en sors pas.

Je suppose qu'il faut que je joue avec des JOIN???

Quelqu'un a-t-il une idée?

Merci d'avance!

Nicolas.
Nico57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 14h09   #2
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
SELECT ap1.idtaflpln
     , jd1.idtlotjeu
     , pl1.idtpln
     , mtlafl
     , nomafl
     , prnafl
     , ve1.valelm
  FROM jeu_donnee jd1
     , affilie_plan ap1
     , affilie af1
     , PLAN pl1
     , valeur_element_mgc ve1
     , element_mgc el1
 WHERE jd1.idtaflpln = ap1.idtaflpln
   AND ap1.idtpln = pl1.idtpln
   AND af1.idtafl = ap1.idtafl
   AND ve1.idtjeudon = jd1.idtjeudon
   AND ve1.idtelm = el1.idtelm (+)
   AND UPPER (el1.codcaltqe(+)) = 'DTEENTAFL'
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 15h49   #3
Membre du Club
 
Inscription : janvier 2006
Messages : 117
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 117
Points : 51
Points : 51
Bonjour Laurent,

Merci pour ta réponse mais cette requête me ramène désormais beaucoup trop de rows : en effet, j'obtiens désormais des valelm pour des codcaltqe autres que 'DTEENTAFL'.

Or, je devrais n'avoir qu'une et une seule valelm par idtaflpln.

As-tu une idée?

Si tu as besoin de plus d'infos, évidemment, n'hésite pas.

Merci.

Nicolas.
Nico57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 16h02   #4
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
ha oui, désolé. Dans ce cas effectivement il vaut mieux passer par les ansi joins

quelque chose du style alors :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
SELECT ap1.idtaflpln
     , jd1.idtlotjeu
     , pl1.idtpln
     , mtlafl
     , nomafl
     , prnafl
     , ve1.valelm
  FROM jeu_donnee jd1
     JOIN affilie_plan ap1 ON (jd1.idtaflpln = ap1.idtaflpln)
     JOIN affilie af1 ON (af1.idtafl = ap1.idtafl)
     JOIN PLAN pl1 ON (ap1.idtpln = pl1.idtpln)
     LEFT JOIN 
       (
          valeur_element_mgc ve1
          JOIN element_mgc el1 ON (ve1.idtelm = el1.idtelm AND el1.codcaltqe='DTEENTAFL' )
      ) ON (ve1.idtjeudon = jd1.idtjeudon);
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 16h17   #5
Membre du Club
 
Inscription : janvier 2006
Messages : 117
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 117
Points : 51
Points : 51
Merci beaucoup Laurent!

Je serai toujours impressionné par la rapidité et la justesse de vos réponses!

Encore merci!

Nicolas.
Nico57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h36.


 
 
 
 
Partenaires

Hébergement Web