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 zmínil Jeffrey L Whitledge, výše uvedený dotaz vrátí jakýkoli recept, který má alespoň jeden přísada v požadovaném seznamu a žádná v nežádoucím seznamu. Pokud jste však chtěli vrátit recepty, které obsahovaly vše přísady v požadovaném seznamu a žádné v nežádoucím seznamu, který byste mohli udělat:
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)
)
V tomto scénáři byste museli nejprve určit počet požadovaných přísad.