Bonjour,

Je suis confronté à une requête SQL un peu complexe et qui peut prendre un temps d'exécution excessif ( >>5h )
dans un premier temps je pense réorganiser les bouts de code de la requête.
la requête est sous la forme 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
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
 
Select entite.libelle,
candidat.nom,
candidat.prenom,
candidat.date,
...
from
candidat,
entite,
employe,
service,
     (select nom,
              prenom
     from employe,
            entite
     where employe.entite = entite.id
     and entite.id = 34894) retenu
where
date = to_date('14/05/2008','DD/MM/YYYY'),
and division.id = entite.division
and retenu.nom = candidat.nom
and retenu.prenom = candidat.prenom
and cadidat.type = 'interne'
union
Select entite.libelle,
candidat.nom,
candidat.prenom,
candidat.date,
...
from
prestataire,
employeur,
employe,
service,
     (select nom,
              prenom
     from employeur,
            entite
     where employe.entite = entite.id
     and entite.id = 34894) retenu
where
date = to_date('14/05/2008','DD/MM/YYYY'),
and division.id = entite.division
and retenu.nom = prestataire.nom
and retenu.prenom = prestataire.prenom
and prestataire.profil = 'SAP'
Vous avez surement remarqué qu'un select imbriqué se répète deux fois.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
(select nom,
              prenom
     from employe,
            entite
     where employe.entite = entite.id
     and entite.id = 34894) retenu
je cherche à récupérer les résultats de ce select(retenu), et le réutiliser autant de fois. sans avoir à lancer la sous requête une deuxième fois.
à titre indicatif, le temps de traitement est divisé par 3 si je stock le résultat de cette requête dans une table temporaire. sauf que ce n'est pas propre, surtout si cette requête est lancé par plusieurs utilisateurs en même temps...

D'avance merci pour vos réponses.