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

  • 本文关键字:我可以 方式 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 所需的成分是微不足道的。

但是,回答

"如果我有成分i1,i2和i3,我可以制作什么食谱"这个问题的优雅方式是什么?

我很快想到的是一个过程,它遍历所有配方并将它们添加到最后返回的集合中,只有rid_iid当它的 iid 不在给定的 iid 集中时,它才会在最后返回。但我不是数据库或 sql 大师,现在很累,所以我认为可能还有更巧妙的东西......

您可以使用

group byhaving

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

相关内容

最新更新