J'ai trois tables comme celle-ci (version simplifiée):Restriction des résultats d'une de plusieurs à plusieurs rejoint requête
Object
---------------
ID | ObjectName
---------------
Category
-----------------
ID | CategoryCode
-----------------
ObjectCategory
---------------------
ObjectID | CategoryID
---------------------
Comment puis-je choisir ObjectName
et CategoryCode
pour tous les objets qui se font pas appartiens à certains CategoryCode
s? Je ne peux pas simplement ajouter une clause WHERE
à la requête JOIN
sur les trois tables, car elle ignorera la restriction voulue tant qu'un objet appartient à au moins un objet autorisé CategoryCode
.
EDIT: Je dois aussi sélectionner CategoryCode
de la table Category
, une sélection uniquement sur la table Object
ne suffit pas
Je pense que vous * pouvez * utiliser une jointure, et je pense que ce sera plus rapide que le PAS EXISTE et non pas dans des solutions. L'astuce consiste à utiliser un OUTER JOIN et à inclure les codes de catégorie que vous souhaitez rechercher dans la condition ON, et utiliser le WHERE pour voir si la catégorie d'objet correspondante est NULL (c'est-à-dire, si elle n'existe pas). Voir ma réponse ci-dessous –
Relisant votre question, je me demandais - voulez-vous dire que vous ne voulez pas voir les objets dans le cas où ils correspondent à une ou toutes les catégories que vous fournissez? –
Je dois exclure tous les objets qui correspondent à l'une des catégories fournies –