Modification / Optimisation requete
Bonjour messieurs dames,
J'ai deux tables
mvt (id_mvt, id_affaire, mt_mvt)
reg (id_reg, id_mvt, id_affaire, mt_reg)
Le but est de récupérer pour une affaire ses montants dans mvt mais aussi les montants dans reg sachant qu'un mouvement peut avoir 0 ou plusieurs reglements
Première idée :
Code:
1 2 3 4 5
| select id_affaire, sum(mt_mvt), sum(mt_reg)
from mvt left outer reg on mvt.id_mvt = reg.id_mvt
and mvt.id_affaire = reg.id_affaire
where mvt.id_affaire = :pid
group by id_affaire ; |
Sauf que là mes montants dans mvt sont multipliés par le nombre d'enregistrements de reg. => pas bien :(
Deuxième idée :
Code:
1 2 3 4 5 6 7 8 9 10
| select id_affaire, (select sum(mt_mvt)
from mvt
where mvt.id_affaire = :pid) mt_mvt,
(select sum(mt_reg)
from reg
where reg.id_affaire = :pid
and exists (select 1
from mvt
where mvt.id_mvt = reg.id_mvt)) mt_reg
from dual ; |
Là çà fonctionne mais on remarque qu'on passe deux fois sur la table mvt (c'est uen table à 20 millions d'enreg et reg à 100 millions). => requete un peu lente
Ma question : existe-t-il une méthode pour faire une sorte de "rupture" sur mvt.id_affaire du genre sum(mt_mvt distinct id_affaire)
Merci d'avance.