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)
)
Както спомена Джефри Л. Уитледж, горната заявка ще върне всяка рецепта, която има поне една съставка в желания списък и нито една в нежелания списък. Въпреки това, ако искате да върнете рецепти, които съдържат всички съставките в желания списък и нито една в нежелания списък, можете да направите:
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)
)
В този сценарий ще трябва първо да определите броя на желаните съставки.