它有2个这样的表:
t_recipe
:
RecipeId Name InsertDate
----------------------------------------------
1 Mutton 9/6/2015 0:00
2 Veg Biryani 9/5/2015 0:00
t_recipe_ingredient
:
RecipeId IngrId InsertDate
----------------------------------------------
1 200 9/6/2015 0:00
1 201 9/5/2015 0:00
1 101 9/4/2015 0:00
1 103 9/3/2015 0:00
2 100 9/2/2015 0:00
2 500 9/6/2015 0:00
2 202 9/5/2015 0:00
2 200 9/4/2015 0:00
现在,当我使用以下查询时:
select *
from t_recipe r
join t_recipe_ingredient i ON r.RecipeID = i.RecipeId
where i.IngrId in (200, 201)
我在输出中得到两个配方,但它应该只给我羊肉,因为它是包含两种成分的。看起来我的查询至少检查了一个匹配但是我希望它只返回那些包含in子句中所有成分的配方。
答案 0 :(得分:3)
您需要按照您的食谱进行分组,并仅采用两者成分
的组select r.RecipeId, r.Name, r.InsertDate
from t_recipe r
join t_recipe_ingredient i ON r.RecipeID = i.RecipeId
where i.IngrId in (200,201)
group by r.RecipeId, r.Name, r.InsertDate
having count(distinct i.IngrId) = 2