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)
)
Som Jeffrey L Whitledge nämnde kommer ovanstående fråga att returnera alla recept som har minst ett ingrediens i den önskade listan och ingen i den oönskade listan. Men om du ville returnera recept som innehöll alla ingredienserna i den önskade listan och ingen i den oönskade listan kan du göra:
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)
)
I det här scenariot måste du först bestämma antalet önskade ingredienser.