mysql - 确定我可以用我的原料烹饪的食谱的优雅方式
问题描述
我喜欢在除夕做鸡尾酒,而且有不少食谱。今年,我想让它更小,尽量减少打开果汁的数量等,所以我花时间将我喜欢的所有食谱转储到 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 不在给定 iid 集合中的 rid_iid 映射时才返回。但我不是数据库或sql大师,现在很累,所以我认为可能有更聪明的东西......
解决方案
您可以使用group by
和having
:
select ri.rid
from recipe_ingredient ri
group by ri.rid
having sum( ri.iid not in (@i1, @i2, @i3 )) = 0;
推荐阅读
- node.js - Docusign Node.JS JWT 示例 - PEM_read_bio:bad end line
- c# - .NET Uri:使用构造函数组合路径的意外 Uri
- java - 动态表格行 - 在现有表格行中插入文本视图内容
- c# - 当子元素具有特定文本时如何从 XML 中提取父值
- angular - 如何解决由于提供“@ionic-native/AppVersion”或“.../ngx”而导致的问题,并且在调用 AppVersion 的任何方法时出现异常?
- javascript - 如何在 DOM 中显示来自源映射的 JS 错误
- sql - 如何计算去年的积压
- java - 在spring boot中从类路径资源文件夹的子目录中读取文件
- java - 如何在 Java Swing 中增加 JSeparator 的高度
- r - 如何从数据框中返回 2 个特定行?