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)
)
Jeffrey L Whitledgeが述べたように、上記のクエリは、少なくとも1つあるレシピを返します。 目的のリストに成分が含まれ、不要なリストには含まれていません。ただし、すべてを含むレシピを返したい場合 希望するリストに含まれる材料と、不要なリストに含まれる可能性のある材料はありません:
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)
)
このシナリオでは、最初に目的の材料の数を決定する必要があります。