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)
)
Zoals Jeffrey L Whitledge al zei, retourneert de bovenstaande zoekopdracht elk recept dat minstens één . heeft ingrediënt in de gewenste lijst en geen in de ongewenste lijst. Als u echter recepten wilt retourneren die alle . bevatten de ingrediënten in de gewenste lijst en geen enkele in de ongewenste lijst die u zou kunnen doen:
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)
)
In dit scenario moet u eerst het aantal gewenste ingrediënten bepalen.