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)
)
Jak wspomniał Jeffrey L Whitledge, powyższe zapytanie zwróci każdy przepis, który zawiera co najmniej jeden składnik na żądanej liście i brak na liście niepożądanej. Jeśli jednak chcesz zwrócić przepisy zawierające wszystkie składniki na pożądanej liście i żadne na niepożądanej liście, które możesz zrobić:
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)
)
W tym scenariuszu musisz najpierw określić liczbę pożądanych składników.