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ævnte, vil ovenstående forespørgsel returnere enhver opskrift, der har mindst én ingrediens på den ønskede liste og ingen på den uønskede liste. Men hvis du ville returnere opskrifter, der indeholdt alle ingredienserne på den ønskede liste og ingen på den uønskede liste, du kunne gøre:
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 dette scenarie skal du først bestemme antallet af ønskede ingredienser.