确定可以用我的食材烹饪的食谱的优雅方式

时间:2018-12-22 16:33:46

标签: mysql sql

我喜欢在除夕夜做鸡尾酒,并且有很多食谱。今年,我想使其变小,以最大程度减少打开的果汁等,所以我花了一些时间将我喜欢的所有食谱转储到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专家,现在已经很累了,所以我认为可能还有更多的创见...

1 个答案:

答案 0 :(得分:3)

您可以使用group byhaving

select ri.rid
from recipe_ingredient ri
group by ri.rid
having sum( ri.iid not in (@i1, @i2, @i3 )) = 0;