查找包含Id的SQL Server的所有逗号分隔列表的记录

时间:2016-08-19 10:48:04

标签: sql sql-server-2008 join in-clause

它有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子句中所有成分的配方。

1 个答案:

答案 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