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 26/03/2007, 10h48   #1
Membre régulier
 
Homme Joseph Cachico
Chef de projet en SSII
Inscription : mai 2005
Messages : 109
Détails du profil
Informations personnelles :
Nom : Homme Joseph Cachico
Localisation : France

Informations professionnelles :
Activité : Chef de projet en SSII

Informations forums :
Inscription : mai 2005
Messages : 109
Points : 73
Points : 73
Par défaut écriture de requête

Bonjour,

Je susi pas super bon en SQL et la je séche, pouvez vous m'aider svp? :

Soit trois tables A, B et C

A joint B (1 -> N) avec A1 = B1
B joint C (1 -> 0) avec B1 = C1
A joint C (1 -> 0) avec A2 = C2

Le but est de ramener l'ensemble des donées sur A, B et C

une ligne de A ->potentiellement plusieurs B ->potentiellement plusieurs C
une ligne de A ->potentiellement plusieurs C sans B

Oracle Version XE

Merci par avance.
jcachico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 12h24   #2
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Regarde ce post, je pense qu'il devrait te permettre de répondre à ton problème :
http://www.developpez.net/forums/sho...light=jointure
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 12h42   #3
Membre régulier
 
Homme Joseph Cachico
Chef de projet en SSII
Inscription : mai 2005
Messages : 109
Détails du profil
Informations personnelles :
Nom : Homme Joseph Cachico
Localisation : France

Informations professionnelles :
Activité : Chef de projet en SSII

Informations forums :
Inscription : mai 2005
Messages : 109
Points : 73
Points : 73
Merci de ta réponse ,

je regarde ca attentivement et te tiens au courant.
jcachico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 15h00   #4
Membre régulier
 
Homme Joseph Cachico
Chef de projet en SSII
Inscription : mai 2005
Messages : 109
Détails du profil
Informations personnelles :
Nom : Homme Joseph Cachico
Localisation : France

Informations professionnelles :
Activité : Chef de projet en SSII

Informations forums :
Inscription : mai 2005
Messages : 109
Points : 73
Points : 73
Par défaut caramba encore raté

Sur tes conseils, j'ai tenter ceci mais cela ne fonctionne pas, une idée?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
SELECT
	*
FROM
	ORD_ART d,
	ORD_PIE a,
	ORD_PIELIG b
		LEFT JOIN ORD_PIEPMO opmo ON (opmo.PIE_COD=b.PIE_COD AND opmo.PIELIG_NUM_LIG=b.PIELIG_NUM_LIG)
		LEFT JOIN ORD_PMO pmot ON (pmot.PMO_COD=opmo.PMO_COD)
		LEFT JOIN ORD_MDL_VALCHP vc ON vc.PIELIG_NUM_LIG=b.PIELIG_NUM_LIG_WEB,
	(
		SELECT
			opl.PIE_COD,
			opl.PIELIG_NUM_LIG
      	FROM ORD_PIE op,ORD_PIELIG opl
      	WHERE op.PIE_COD = opl.PIE_COD
   ) KENG
WHERE
	a.PIE_COD='XXXXXXX'
	AND a.PIE_COD=b.PIE_COD
	AND b.ART_COD=d.ART_COD
	AND d.ART_WEB='XXXXXXX'
	AND d.ART_ACF='XXXXXXX'
	AND vc.PIE_COD=a.PIE_COD_WEB
	AND (vc.PIE_COD=KENG.PIE_COD(+)) 
	AND (vc.PIELIG_NUM_LIG=KENG.PIELIG_NUM_LIG(+))
et sa réponse :

Code :
1
2
 
ORA-25156: une ancienne jointure externe (+) ne peut pas être utilisée avec des jointures ANSI
d'aprés ce que je comprend, il faut ecrire la jointure autrement, mais je vois pas comment...
jcachico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 15h06   #5
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Oui tu as mélangé l'écriture oracle des jointures(+) et l'écriture normalisé JOIN. Il faut que tu remplaces soit l'une soit l'autre.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 15h13   #6
Membre régulier
 
Homme Joseph Cachico
Chef de projet en SSII
Inscription : mai 2005
Messages : 109
Détails du profil
Informations personnelles :
Nom : Homme Joseph Cachico
Localisation : France

Informations professionnelles :
Activité : Chef de projet en SSII

Informations forums :
Inscription : mai 2005
Messages : 109
Points : 73
Points : 73
A OK !
J'y retourne !
A+
jcachico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 16h03   #7
Membre régulier
 
Homme Joseph Cachico
Chef de projet en SSII
Inscription : mai 2005
Messages : 109
Détails du profil
Informations personnelles :
Nom : Homme Joseph Cachico
Localisation : France

Informations professionnelles :
Activité : Chef de projet en SSII

Informations forums :
Inscription : mai 2005
Messages : 109
Points : 73
Points : 73
J'ai tenté ceci mais cela ne fonctionne pas, car par exemple s'il n'y as pas de données sur la table vcje récupère rien (alors que je souhaite quand meme recupérer le reste des datas) tu vois une solution ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
SELECT
	*
FROM
	ORD_ART d,
	ORD_PIE a,
	ORD_PIELIG b,
	ORD_PIEPMO opmo,
	ORD_PMO pmot,
	ORD_MDL_VALCHP vc,
	(	SELECT
			op.PIE_COD_WEB,
			opl.PIELIG_NUM_LIG_WEB
      	FROM
      		ORD_PIE op,
      		ORD_PIELIG opl
      	WHERE
      		op.PIE_COD = opl.PIE_COD
      		AND PIE_COD_WEB IS NOT NULL
      		AND PIELIG_NUM_LIG_WEB IS NOT NULL
   ) KENG
WHERE
	a.PIE_COD='XXXX'
	AND a.PIE_COD=b.PIE_COD
	AND b.ART_COD=d.ART_COD
	AND d.ART_WEB='XXXX'
	AND d.ART_ACF='XXXX'
	AND (vc.PIE_COD=KENG.PIE_COD_WEB(+))
	AND (vc.PIELIG_NUM_LIG=KENG.PIELIG_NUM_LIG_WEB(+))
	AND (opmo.PIE_COD=b.PIE_COD(+))
	AND (opmo.PIELIG_NUM_LIG=b.PIELIG_NUM_LIG(+))
	AND (pmot.PMO_COD=opmo.PMO_COD)
jcachico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 17h03   #8
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Par rapport à l'exemple que tu as donné dans ton premier post, voici ce que cela devrait donner :
Code :
1
2
3
4
5
6
SELECT *
FROM A, (SELECT B.*, C.*
           FROM B, C
           WHERE B1 = C1 (+)) D
WHERE A1 = B1
  AND A2 = C2 (+);
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 17h34   #9
Membre régulier
 
Homme Joseph Cachico
Chef de projet en SSII
Inscription : mai 2005
Messages : 109
Détails du profil
Informations personnelles :
Nom : Homme Joseph Cachico
Localisation : France

Informations professionnelles :
Activité : Chef de projet en SSII

Informations forums :
Inscription : mai 2005
Messages : 109
Points : 73
Points : 73
Par défaut ayé !

Je vien de lire ton dernir post mais j'avais déjà la bonne piste !

voici :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
SELECT
	d.*,
	vc.CHP_COD,
	vc.VALCHP,
	KENG.ze_PIE_COD_WEB,
	KENG.ze_PIE_COD_REF,
	KENG.ze_PIELIG_NUM_LIG_WEB,
	KENG.ze_ART_COD,
	KENG.ze_PIELIG_QTE AS PIELIG_QTE,
	KENG.ze_PIELIG_CMT_CLI AS PIELIG_CMT_CLI
 
FROM
	ORD_ART d,
	ORD_MDL_VALCHP vc,
	(	SELECT
			op.PIE_COD_WEB AS ze_PIE_COD_WEB,
			op.PIE_COD AS ze_PIE_COD_REF,
			opl.PIELIG_NUM_LIG_WEB AS ze_PIELIG_NUM_LIG_WEB,
			opl.ART_COD AS ze_ART_COD,
			PIELIG_QTE AS ze_PIELIG_QTE,
			PIELIG_CMT_CLI AS ze_PIELIG_CMT_CLI
      	FROM
      		ORD_PIE op,
      		ORD_PIELIG opl
      	WHERE
      		op.PIE_COD=opl.PIE_COD
      		AND op.PIE_COD='XXXX'
   ) KENG
WHERE
    KENG.ze_ART_COD=d.ART_COD
	AND d.ART_WEB='XXXX'
	AND d.ART_ACF='XXXX'
	AND (vc.PIE_COD(+)=KENG.ze_PIE_COD_WEB)
	AND (vc.PIELIG_NUM_LIG(+)=KENG.ze_PIELIG_NUM_LIG_WEB)
Un grand merci et a bientot sur les ondes !
jcachico 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 00h56.


 
 
 
 
Partenaires

Hébergement Web