查找包含 ID SQL 服务器的所有逗号分隔列表的记录
To find records which are contains all comma-separated list of Id's SQL Server
它有 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)
我在输出中得到了两种食谱,但它应该只给我羊肉,因为它包含两种成分。似乎我的查询正在检查至少一个匹配项,但是我希望它应该 return 只有那些包含子句中所有成分的食谱。
您需要按照您的食谱分组,并且只选择具有两种种成分的组
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
它有 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)
我在输出中得到了两种食谱,但它应该只给我羊肉,因为它包含两种成分。似乎我的查询正在检查至少一个匹配项,但是我希望它应该 return 只有那些包含子句中所有成分的食谱。
您需要按照您的食谱分组,并且只选择具有两种种成分的组
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