[RESOLU] [SQL] Limiter le nombre de requetes imbriquées

Limiter le nombre de requetes imbriquées [RESOLU] [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 17-05-2004 à 16:49:00    

Je me débrouille en SQL mais je suis loin de maitriser à fond !
Est-il possible de réutiliser dans une sous requete un des resultats de la requete principale.
 
Par ex
 
SELECT N_Facture,  
      (SELECT SUM(MtCommercial) FROM dbo_LigneFacture WHERE type = 1
       and N_Facture in  
                      (select N_Facture from dbo_Facture  
                      WHERE RefClient = '3' ))
WHERE RefClient = '3'
 
Si vous avez bien regardé je met la meme condition à 2 endroits différents donc à mon avis elle est simplifiable car elle est TRES lourde à faire marcher. Je l'ai simplifiée mais il faut 4 à 5 s à mon server SQL pour l'executer.
Donc plutot que de faire 2 requetes imbriquées, si quelqu'un connaissait un moyen de limiter à 1 seule requête imbrquée, cela m'aiderait beaucoup.
Merci d'avoir lu jusqu'au bout !  :)


Message édité par cixen le 18-05-2004 à 13:10:12
Reply

Marsh Posté le 17-05-2004 à 16:49:00   

Reply

Marsh Posté le 17-05-2004 à 19:41:56    

tu nous a donne toute ta requete la ? j'ai pas l'impression ... il manque un FROM quelquepart.

Reply

Marsh Posté le 18-05-2004 à 10:38:57    

Ouaip, il en manque un mais c'est juste ici que je l'ai oublié. Enfait j'ai trouvé un autre moyen car celle ci est complètement fausse mais je galère encore car c'est avec des inner join il y a 8 alias de la meme table et en plus il faut faire des sommes et donc des agregs. Je poserai une autre question certainement plus tard mais si quelqu'un sait manier les sum, les group by et les Inner join qu'il me le dise tt de suite !

Reply

Marsh Posté le 18-05-2004 à 10:53:51    

Présent !
Cela dit tu peux passer aussi par des vues
pour te faciliter la tâche en décomposant ton prob ...
 
ex:
create view prod_sum_qte
as
select num_prod,sum(qte) as sum_qte from matable
where typ_prod in (1,2,3) ...  

Reply

Marsh Posté le 18-05-2004 à 13:08:46    

Non c'est bon j'ai trouvé une solution à mon pb... enfin mon collègue plutôt. Si ca intéresse quelqu'un..
 

Code :
  1. SELECT n_facture, DateFacture, mtHT, ccial,Editer,
  2. (SELECT sum(mtcommercial) FROM dbo_LigneFacture L1 WHERE f1.N_facture = L1.n_Facture AND type = 1 ) as Abonnement,
  3. FROM dbo_facture F1 WHERE Refclient = '3'


Message édité par cixen le 18-05-2004 à 13:09:46
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed