Bonjour à tous.

J'ai la hiérarchie de données suivante :
"Phases" contenant des "Activités" contenant elles même des "Taches".
Le tout est représenté dans une table de la manière suivante :
CREATE TABLE TACHES (
id_unique NUMBER(10,0) NULL,
nom VARCHAR2(192) NULL,
niveau NUMBER(5,0) NULL,
sequence NUMBER(5,0) NULL
)
Soit par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
ID_UNIQUE   NOM       NIVEAU   SEQUENCE
1           Phase1        1      1
2           Activite1     2      2
3           Tache1        3      3
4           Tache2        3      4
5           Activite2     2      5
6           Tache3        3      6
7           Phase2        1      7
8           Activite3     2      8
9           Tache4        3      9
Je souhaite représenter la "liste des taches" sous la forme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
ID_UNIQUE PHASE  ACTIVITE  TACHE
3         Phase1 Activite1 Tache1
4         Phase1 Activite1 Tache2
6         Phase1 Activite2 Tache3
9         Phase2 Activite3 Tache4
Ma solution est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT T.id_unique,
       P.nom,
       A.nom,
       T.nom
FROM   TACHES T, TACHES P,TACHES A
WHERE  T.niveau = 3
AND    A.sequence = ( SELECT MAX (sequence) 
			FROM TACHES
			WHERE niveau = 2 
			AND sequence < T.sequence )
AND    P.sequence = ( SELECT MAX (sequence) 
			FROM TACHES
			WHERE niveau = 1 
			AND sequence < T.sequence )
Ce code me donne le bon résultat mais ce n'est pas vraiment rapide !!!! (j'ai en réalité plusieurs centaines de milliers de lignes Taches...)

Comment optimiser une telle requête ?
Merci de votre aide
Fred.