Bonjour à tous,
J'ai souvent cette interrogation quand j'écris une requête un petit peu complexe, quel est la meilleure façon d'écrire ma requête des if's || des unions ? Et il y a un cas que est un peu récurent et pour lequel j'aimerai avoir votre avis :
Je dois récupérer des données mais il n y a pas un cas de figure mais plusieurs, alors qu'est ce qui est le mieux faire des if (sur des champs récupérer dans un table temp) et des jointures parfois un peu tordu ou encore délimiter les cas avec des UNION ?
Je vais prendre mon cas actuel comme exemple :
Je veux récupérer un produit et l'arborescence des catégories qui le contient (au maximum on a une rubrique > Sous-rubrique > Sous-Sous-Rubrique au minimum Rubrique)
Donc quel est le mieux à faire :
Et encore ça c'est le cas le plus simple (en plus j'ai un peu simplifié puisque je dois faire des vérification métier ...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 if(Sous-rubrique is null and Sous-Sous-Rubrique is null) Begin SELECT p1.Lbl as LBL-Rub, p1.Url as URL-Rub, p2.Lbl as LBL-Prod, p2.Url as URL-Prod FROM Prod pr, Rub r, Page as p1, Page as p2 WHERE pr.Fk_Rub = r.Pk_Rub AND p2.Fk_Rub = r.Pk_Rub AND pr.PK_Pro = p1.Fk_Pro AND pr.Pk_Prod = @ProdId if(Sous-rubrique is null and Sous-Sous-Rubrique is not null) ...
Ou faire :
ect ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT p1.Lbl as LBL-Rub, p1.Url as URL-Rub FROM Prod pr, Page as p1 WHERE pr.PK_Pro = p1.Fk_Pro AND pr.Pk_Prod = @ProdId UNION SELECT p2.Lbl as LBL-Prod, p2.Url as URL-Prod FROM Rub r, Page as p2, Prod as pr WHERE p2.Fk_Rub = r.Pk_Rub AND pr.Pk_Prod = @ProdId AND pr.Fk_Rub = r.Pk_Rub
Quand dites vous ?
J'espère que j'ai été claire, en vous remerciant.
Partager