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 :

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) ...
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 ...).

Ou faire :

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
ect ...

Quand dites vous ?

J'espère que j'ai été claire, en vous remerciant.