2 votes

SQL Left/Inner/Normal Join vs instruction conditionnelle Where while

Je suis relativement novice en matière de programmation SQL, alors allez-y doucement avec moi.

Je suis en train d'écrire une requête qui produira le résultat en fonction de la valeur de l'un des paramètres externes. La structure ressemble actuellement à ce qui suit :

@ShowEntireCategory bit = 0

select distinct
p.pk
p.name
--other columns
from dbo.Project P
--bunch of left joins
where p.Status = 'Open'
--other conditions

Ce que j'essaie d'implémenter est le suivant : lorsque la valeur de ShowEntireCategory est 1 (changée programmatiquement par la sélection d'un bouton radio), il montrera les enregistrements de toutes les sous-catégories, qui sont à l'intérieur de la catégorie. Lorsqu'elle est égale à 0, seuls les enregistrements de la sous-catégorie sélectionnée sont affichés, tandis que les autres sous-catégories de cette catégorie restent intactes.

Je me suis produit une recherche sur la meilleure approche, et il réduit soit déclarations ou JOINs .

Ce que je veux savoir, c'est laquelle de ces approches je dois utiliser pour mon scénario ? Dans mon cas, la priorité est l'optimisation (temps d'exécution minimal) et la facilité de mise en œuvre.

NOTE : Mon objectif principal n'est pas de recevoir un code prêt à l'emploi (bien qu'un exemple de code serait le bienvenu), je veux juste connaître une meilleure approche, afin de pouvoir continuer mes recherches dans cette direction.

Merci d'avance !

UPDATE

J'ai effectué des recherches supplémentaires sur la structure de la base de données, et j'ai réussi à réduire les paramètres pertinents pour la question.

L'un est la table dbo.Project, qui contient : PK, CategoryKey (FK) (connecté à celui de la deuxième table), Name, Description, et tous les autres paramètres qui ne sont pas pertinents.

La deuxième est la table dbo.Area, qui contient : PK, AreaNumber, Name, CategoryKey (FK), IsCategory (1 = est catégorie, 0 = pas catégorie).

Désolé, mais je travaille dans un environnement rapide, c'est le maximum que j'ai pu faire. Veuillez me faire savoir si ce n'est pas suffisant.

0voto

BrandonM Points 355

Avec les informations que vous avez fournies, la meilleure solution serait d'utiliser une combinaison de clauses WHERE et JOINS. Vous devrez probablement utiliser une clause WHERE sur la deuxième table (décrite dans la mise à jour) pour sélectionner toutes les lignes qui sont des catégories. Ensuite, vous joindrez ce résultat à vos autres tables/données. Enfin, vous pouvez utiliser une clause CASE (pour plus de détails, voir ici ) pour vérifier votre variable et déterminer si vous avez besoin de toutes les catégories ou seulement de certaines (ce qui peut être traité par une clause WHERE supplémentaire).

Je ne suis pas sûr que cela réponde entièrement à votre question, mais pour une réponse plus détaillée, nous aurions besoin d'une description plus précise du schéma de la base de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X