我有一个新爱好,叫做“把味道不好的利口酒变成好东西”,也就是“混合鸡尾酒”。
因为我是个书呆子,我不想在书中查找食谱,阅读配料表并注意到我缺少一些东西。相反,我想拥有一个包含我收集的所有食谱和配料的数据库,并让计算机告诉我可以用我目前在家中拥有的配料“构建”哪些食谱。为此,我有这两个表:
表 1:包含有关多对多关系的信息
recipe | ingredient
1 | 1
1 | 2
1 | 3
2 | 1
2 | 4
表 2:该成分是否可用的信息
ingredient | available
1 | true
2 | true
3 | true
4 | false
我的问题对所有其他表都不感兴趣。
这两个表可以很容易地INNER JOIN
组合ingredient = ingredients.id
成一个大表,如下所示:
recipe | ingredient | available
1 | 1 | true
1 | 2 | true
1 | 3 | true
2 | 1 | true
2 | 4 | false
如果你看一下这个,你会注意到我可以混合配方 1,但不能混合配方 2,因为缺少一种成分。
我现在要做的是找到一种方法,使结果看起来像:
recipe | all_available
1 | true
2 | false
我已经找到了一种方法来检查某个食谱的所有成分是否可用:
SELECT RtI.recipe, BIT_AND(ingredients.available) AS all_available
FROM RtI
INNER JOIN ingredients ON (ingredients.id = RtI.ingredient)
WHERE RtI.recipe = 1
结果:
recipe | all_available
1 | true
但是你必须搜索一个特定的 ID,我想要的不是“告诉我是否所有成分都可用于这个食谱”,而是“告诉我所有成分都可用的所有食谱”。
有没有办法通过使用 MySQL 查询来实现这一点?