Bonjour,
Je voulais savoir si c'est correct de faire un select dans un select ?
Je m'explique: J'ai des commandes avec des sous lignes que l'on peut valider ou non. Je veux, dans un tableau, afficher les commandes avec une colonne dans chacune des lignes qui indique le nombre de sous lignes validées.
J'ai pensé à plusieurs solutions :
- changer ma requete qui liste les commande en ajoutant une jointure qui compte le nombre de lignes validées ou par sous requete dans le FROM. Mon pb c'est que ma requete initiale a un cout de 3903 et qu'elle passe d'un cout à 21535. (il y a de nombreuses tables...)
- dans mon tableau, lors du remplissage de chaque ligne (asp.net/c#) appeler une fonction qui va me compter le nombre de sous lignes validées pour chaque ligne de commande. je trouve cette solution un peu moche car ça fait des acces base pour chaque ligne remplie (la requete qui compte n'a un cout que de 4).
- mettre un champ dans mes commandes qui contienne le nombre de sous lignes validée et ce champs serait mis a jour par un trigger sur ma table des sous ligne quand on met à jour le flag de validation. Cette solution me parait moins mal que la précédente mais ça fait rajouter un champ dans mes commandes alors qu'il peut etre calculé.....et je ne sais pas quel est le cout d'un trigger mais cela peut ralentir la base...
- enfin, solution que je viens de trouver, lorsque je fais mon select pour lister les commande, faire un sous select qui me compte le nb de sous lignes validées. Par exemple :
select cmd.cde_id,cmd.nom, cmd.date, (select count(*) from mes_lignes where valide=1 and cde_id=cmd.cde_id) as qte_valides, ....
from commande cmd, ......
J'ai regardé le cout via l'explain plan, il ne bouge pas par rapport à ma requete initial. Cependant, je voulais savoir si d'un point de vu programmeur, c'est moche ? je viens de démarrer et je n'ai pas beaucoup d'expérience sur ce qui est bien/pas bien.
Pourriez-vous me donner votre avis ?
Je vous remercie par avance pour vos réponses.
Hukom
Partager