OVH Cloud OVH Cloud

[WD 9] code SQL et temps d'exe

24 réponses
Avatar
JeAn-PhI
bonjour

voici le code sql d'une req :

SELECT *
FROM T_CLIENT
WHERE T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
and T_CLIENT.CL_ID in
(
SELECT T_CLIENT.CL_ID,
SUM(T_FACTURE.TOTAL) AS Total
FROM T_FACTURE, T_CLIENT
WHERE T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
GROUP BY T_CLIENT.CL_ID

[
union
SELECT T_CLIENT.CL_ID,
SUM(T_AVOIR_FACTURE.TOTAL) AS Total
from T_AVOIR_FACTURE, T_CLIENT
where T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
group by T_CLIENT.CL_ID
]

)
ORDER BY T_CLIENT.CL_RAISON_SOCIALE ASC

1 - celle-ci s'execute en moins de 7 sec (très gros volume de données)
2 - si j'enlève tout ce qui est entre [] le temps passe à + de 20 sec

qq'un saurait me dire pourquoi car il me semble qu'elle devrait être
plus rapide dans le 2ème cas

--
Cordialement JeAn-PhI

4 réponses

1 2 3
Avatar
Axel
JeAn-PhI a écrit :
bonjour

je reviens avec une autre requête dont je n'arrive pas à formulé
voici le modèle des data

t_client(0,n)->(1,1)t_facture(0,1)->(1,1)t_paiement_facture

je voudrais recupérer la liste des clients ayant une ou des factures
payées selon une période donnée






Sauf erreur :

SELECT t_client.* FROM t_client,t_facture
WHERE EXISTS
(
SELECT * FROM t_paiement_facture
WHERE t_paiement_facture.fa_id = t_facture.fa_id
)
AND t_client.cli_id = t_facture.cli_id


Pour la période, il suffit d'une clause sur la date (sur les factures ou
les paiements, selon ce que tu souhaites)
Avatar
JeAn-PhI
Le 10/02/2007, Axel a supposé :
JeAn-PhI a écrit :
bonjour

je reviens avec une autre requête dont je n'arrive pas à formulé
voici le modèle des data

t_client(0,n)->(1,1)t_facture(0,1)->(1,1)t_paiement_facture

je voudrais recupérer la liste des clients ayant une ou des factures payées
selon une période donnée






Sauf erreur :

SELECT t_client.* FROM t_client,t_facture
WHERE EXISTS
(
SELECT * FROM t_paiement_facture
WHERE t_paiement_facture.fa_id = t_facture.fa_id
)
AND t_client.cli_id = t_facture.cli_id


Pour la période, il suffit d'une clause sur la date (sur les factures ou les
paiements, selon ce que tu souhaites)



merci je vais voir le temps d'exe

--
Cordialement JeAn-PhI
Avatar
JeAn-PhI
Axel a exprimé avec précision :
JeAn-PhI a écrit :
bonjour

je reviens avec une autre requête dont je n'arrive pas à formulé
voici le modèle des data

t_client(0,n)->(1,1)t_facture(0,1)->(1,1)t_paiement_facture

je voudrais recupérer la liste des clients ayant une ou des factures payées
selon une période donnée






Sauf erreur :

SELECT t_client.* FROM t_client,t_facture
WHERE EXISTS
(
SELECT * FROM t_paiement_facture
WHERE t_paiement_facture.fa_id = t_facture.fa_id
)
AND t_client.cli_id = t_facture.cli_id


Pour la période, il suffit d'une clause sur la date (sur les factures ou les
paiements, selon ce que tu souhaites)



donne pas le bon résultat

--
Cordialement JeAn-PhI
Avatar
Pierre BOUSQUET
select DISTINCT cli_id
FROM t_facture
LEFT JOIN t_client ON t_client.cli_id=t_facture.cli_id
WHERE fa_date BETWEEN DATE1 AND DATE2 AND fa_id IN (SELECT fa_id FROM
t_paiement_facture)

JeAn-PhI a exprimé avec précision :
bonjour

je reviens avec une autre requête dont je n'arrive pas à formulé
voici le modèle des data

t_client(0,n)->(1,1)t_facture(0,1)->(1,1)t_paiement_facture

je voudrais recupérer la liste des clients ayant une ou des factures payées
selon une période donnée

avec

t_client : cli_id, cli_raison_sociale
t_facture : fa_id, fa_date, cli_id
t_paiement_facture : pa_id, fa_id

merci



--
Pierre BOUSQUET

" Ne me dites pas que ce problème est difficile.
S'il n'était pas difficile, ce ne serait pas un problème. "
1 2 3