我喜欢在除夕夜做鸡尾酒,并且有很多食谱。今年,我想使其变小,以最大程度减少打开的果汁等,所以我花了一些时间将我喜欢的所有食谱转储到MySQL数据库中,基本上具有以下格式:
RECIPE
RID (INT, PK, auto_inc)
NAME (VARCHAR)
INGREDIENT
IID (INT, PK, auto_inc)
NAME (VARCHAR)
RECIPE_INGREDIENT
RID (INT, FK to RECIPE.RID)
IID (INT, FK to INGREDIENT.IID)
AMOUNT (VARCHAR)
PK: RID, IID
我现在要说的是“没有x,y和z鸡尾酒就不能做”。确定制作x,y和z所需的成分很简单。
但是回答“如果我有成分i 1 ,i 2 和i 3 的问题,这是一种优雅的方法,我可以做些什么食谱?”
我很快想到的是一个过程,它遍历所有食谱,并将其添加到最后返回的集合中(仅当没有iid不在其中的rid_iid映射时)给定的一组id。但是我现在不是数据库或sql专家,现在已经很累了,所以我认为可能还有更多的创见...
答案 0 :(得分:3)
您可以使用group by
和having
:
select ri.rid
from recipe_ingredient ri
group by ri.rid
having sum( ri.iid not in (@i1, @i2, @i3 )) = 0;