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 :
Soit par exemple :CREATE TABLE TACHES (
id_unique NUMBER(10,0) NULL,
nom VARCHAR2(192) NULL,
niveau NUMBER(5,0) NULL,
sequence NUMBER(5,0) NULL
)
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
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
Ma solution est la suivante :
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
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...)
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 )
Comment optimiser une telle requête ?
Merci de votre aide
Fred.
Partager