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)
)
Come menzionato da Jeffrey L Whitledge, la query precedente restituirà qualsiasi ricetta che ne abbia almeno una ingrediente nell'elenco desiderato e nessuno nell'elenco indesiderato. Tuttavia, se desideri restituire ricette che contenevano tutte gli ingredienti nella lista desiderata e nessuno nella lista indesiderata potresti fare:
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 questo scenario, dovresti prima determinare il conteggio degli ingredienti desiderati.