Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour 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 01/02/2008, 11h08   #1
Paulinho
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Par défaut [Débutant] Problème avec un SELECT

Bonjour,


J'ai quatre tables:

- al (cd_aluno, cd_curso, ...)
- cur (cd_curso, ...)
- hist (cd_curso, cd_aluno, cd_lectivo, ...)
- primvez (cd_curso, cd_aluno, cd_lectivo, ...)

J'ai fait un WHERE comme ça:

Code :
1
2
3
4
5
6
7
8
9
 
 
WHERE (al.cd_curso = cur.cd_curso
 
      AND cur.cd_curso = hist.cd_curso
 
      AND primvez.cd_curso = hist.cd_curso
 
      AND primvez.cd_curso = al.cd_curso)
Mais l'éxécution ne finit pas.

Il y a une erreur mais je ne sais pas où...

Merci d'avance.

Dernière modification par orafrance ; 01/02/2008 à 14h03.
  Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 11h17   #2
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Afin de pouvoir dire qqch alors il nous faut:
- La version Oracle
- Les tailles des tables
- Les index créés sur ces tables
- Eventuellement si les statistiques sont collectées ou non
__________________
Consultant et formateur Oracle
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 11h49   #3
Paulinho
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Oracle 9.2

table al: taille 119

table cur: taille 23 (view)

table hist: taille 3 (view)

table primvez: taille 3 (view)

Je ne sais pas ce que c'est l'index...

Pas de statistiques.

Merci.
  Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 12h18   #4
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Nous voilà pas trop avancés ...
Si ce sont des vues alors les informations fournies ne servent pas à grand chose!
Il faut avoir les informations sur les tables sous-jacentes.
__________________
Consultant et formateur Oracle
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 13h13   #5
Membre émérite
 
Homme Serge RUQUET
Consultant informatique
Inscription : août 2006
Messages : 669
Détails du profil
Informations personnelles :
Nom : Homme Serge RUQUET
Âge : 50
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2006
Messages : 669
Points : 840
Points : 840
c'est normal,
si tu écris la requête avec des join, ça te donne

Code :
1
2
3
4
5
SELECT * 
FROM al
JOIN cur ON al.cd_curso = cur.cd_curso
JOIN hist ON cur.cd_curso = hist.cd_curso
JOIN primvez ON primvez.cd_curso = hist.cd_curso
donc automatiquement ton
Code :
AND primvez.cd_curso = al.cd_curso
est toujours vrai mais tu créé un jointure circulaire que ne peut résoudre le moteur d'oracle: il jointe al avec cur, puis hist avec cur, puis primvez avec hist (jusque là c'est ok) puis tu lui demande de rejointer primvez avec al (la c'est plus bon)
__________________
Errare humanum est, perseverare diabolicum (Sénèque)
serge0934 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 13h46   #6
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Citation:
Envoyé par serge0934 Voir le message
c'est normal,
si tu écris la requête avec des join, ça te donne

Code :
1
2
3
4
5
SELECT * 
FROM al
JOIN cur ON al.cd_curso = cur.cd_curso
JOIN hist ON cur.cd_curso = hist.cd_curso
JOIN primvez ON primvez.cd_curso = hist.cd_curso
donc automatiquement ton
Code :
AND primvez.cd_curso = al.cd_curso
est toujours vrai mais tu créé un jointure circulaire que ne peut résoudre le moteur d'oracle: il jointe al avec cur, puis hist avec cur, puis primvez avec hist (jusque là c'est ok) puis tu lui demande de rejointer primvez avec al (la c'est plus bon)
Non! Ce raisonnement n'est pas correct ...
Voici un petit exemple avec un ensemble de tables qui ont une colonne en commun (numvol)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
explain plan
for select *
from vol v, depart d, reservation r
where v.numvol = d.numvol and d.numvol = r.numvol

explain plan succeeded.
select *
from table (dbms_xplan.display ('plan_table', null, 'serial'))

PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                            
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
Plan hash value: 1896996733                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                             
--------------------------------------------------------------------------------------                                                                                                                                                                                                                       
| Id  | Operation           | Name           | Rows  | Bytes | Cost (%CPU)| Time     |                                                                                                                                                                                                                       
--------------------------------------------------------------------------------------                                                                                                                                                                                                                       
|   0 | SELECT STATEMENT    |                |    13 |   949 |     6  (17)| 00:00:01 |                                                                                                                                                                                                                       
|*  1 |  HASH JOIN          |                |    13 |   949 |     6  (17)| 00:00:01 |                                                                                                                                                                                                                       
|*  2 |   HASH JOIN         |                |     8 |   448 |     5  (20)| 00:00:01 |                                                                                                                                                                                                                       
|   3 |    TABLE ACCESS FULL| VOL            |     5 |   180 |     2   (0)| 00:00:01 |                                                                                                                                                                                                                       
|   4 |    TABLE ACCESS FULL| DEPART         |     8 |   160 |     2   (0)| 00:00:01 |                                                                                                                                                                                                                       
|   5 |   INDEX FULL SCAN   | PK_RESERVATION |     9 |   153 |     1   (0)| 00:00:01 |                                                                                                                                                                                                                       
--------------------------------------------------------------------------------------                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                             
Predicate Information (identified by operation id):                                                                                                                                                                                                                                                          
---------------------------------------------------                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                             
   1 - access("D"."NUMVOL"="R"."NUMVOL")                                                                                                                                                                                                                                                                     
   2 - access("V"."NUMVOL"="D"."NUMVOL")                                                                                                                                                                                                                                                                     

18 rows selected

explain plan
for select *
from vol v, depart d, reservation r
where v.numvol = d.numvol and d.numvol = r.numvol and v.numvol = r.numvol

explain plan succeeded.
select *
from table (dbms_xplan.display ('plan_table', null, 'serial'))

PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                            
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
Plan hash value: 1896996733                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                             
--------------------------------------------------------------------------------------                                                                                                                                                                                                                       
| Id  | Operation           | Name           | Rows  | Bytes | Cost (%CPU)| Time     |                                                                                                                                                                                                                       
--------------------------------------------------------------------------------------                                                                                                                                                                                                                       
|   0 | SELECT STATEMENT    |                |     3 |   219 |     6  (17)| 00:00:01 |                                                                                                                                                                                                                       
|*  1 |  HASH JOIN          |                |     3 |   219 |     6  (17)| 00:00:01 |                                                                                                                                                                                                                       
|*  2 |   HASH JOIN         |                |     8 |   448 |     5  (20)| 00:00:01 |                                                                                                                                                                                                                       
|   3 |    TABLE ACCESS FULL| VOL            |     5 |   180 |     2   (0)| 00:00:01 |                                                                                                                                                                                                                       
|   4 |    TABLE ACCESS FULL| DEPART         |     8 |   160 |     2   (0)| 00:00:01 |                                                                                                                                                                                                                       
|   5 |   INDEX FULL SCAN   | PK_RESERVATION |     9 |   153 |     1   (0)| 00:00:01 |                                                                                                                                                                                                                       
--------------------------------------------------------------------------------------                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                             
Predicate Information (identified by operation id):                                                                                                                                                                                                                                                          
---------------------------------------------------                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                             
   1 - access("D"."NUMVOL"="R"."NUMVOL" AND "V"."NUMVOL"="R"."NUMVOL")                                                                                                                                                                                                                                       
   2 - access("V"."NUMVOL"="D"."NUMVOL")                                                                                                                                                                                                                                                                     

18 rows selected
Il n' y a pas une jointure supplémentaire mais les prédicats changent un peu
__________________
Consultant et formateur Oracle
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2008, 23h14   #7
Membre actif
 
Étudiant
Inscription : février 2008
Messages : 224
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2008
Messages : 224
Points : 185
Points : 185
Bonjour,

Peux-tu nous mettre ta requête complète ainsi que les structures de tes tables et ce que tu veux exactement faire ?

Ainsi ca sera plus aisé pour nous de te répondre.
Milo59000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Mettre Résolu
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h33.


 
 
 
 
Partenaires

Hébergement Web