我的数据库中有2个表t_recipe和t_recipe_ingredient有1对多关系意味着一个食谱可以有多个成分。我必须给出一个过滤条件,它应该给我含有成分或排除成分的食谱。
对于包含我创建了以下查询,它工作正常:
blog = Nested(
properties={
'id': Integer(),
'rating': Integer()
}
)
但是对于排除我得到的食谱有成分110,111然而它不应该返回它们,我认为这是由于内部连接,其中包括所有其他成分和返回食谱:
select *
from t_recipe r
join t_recipe_ingredient rexc ON r.RecipeID = rexc.RecipeID
where r.RecipeTypeID = 1
and rexc.IngrId in (110, 111)
答案 0 :(得分:3)
我认为你必须使用not exists排除配方
select * from t_recipe r
where r.RecipeTypeID = 1
and not exists(
select null
from t_recipe_ingredient
where ingrid in(110, 111) and r.RecipeID = rexc.RecipeID
)
答案 1 :(得分:2)
如果你想要没有这些成分的食谱,这里有一种方法:
select r.*
from t_recipe r left join
t_recipe_ingredient rexc
on r.RecipeID = rexc.RecipeID and rexc.IngrId in (110, 111)
where r.RecipeTypeID = 1 and rexc.RecipeID is null;
答案 2 :(得分:0)
尝试以下方法:
select *
from t_recipe r
join t_recipe_ingredient rexc WITH (NOLOCK) ON r.RecipeID = rexc.RecipeID AND rexc.IngrId not in (110, 111)
where r.RecipeTypeID = 1