Select Distinct ...
From Recipes As R
Where R.ingredient in(ingredient_a, ingredient_b...)
And Not Exists(
Select 1
From Recipes As R2
Where R2.Recipe = R.Recipe
And R2.Ingredient In(ingredient_d)
)
Comme Jeffrey L Whitledge l'a mentionné, la requête ci-dessus renverra toute recette qui en a au moins une ingrédient dans la liste souhaitée et aucun dans la liste indésirable. Cependant, si vous vouliez renvoyer des recettes qui contenaient tous les ingrédients dans la liste souhaitée et aucun dans la liste indésirable, vous pourriez faire :
Select Distinct ...
From Recipes As R
Where Exists (
Select 1
From Recipes As R2
Where R2.Recipe = R.Recipe
And R2.ingredient in(ingredient_a, ingredient_b...)
Having Count(*) = @CountOfPassedIngredients
)
And Not Exists(
Select 1
From Recipes As R2
Where R2.Recipe = R.Recipe
And R2.Ingredient In(ingredient_d)
)
Dans ce scénario, vous devez d'abord déterminer le nombre d'ingrédients souhaités.