【发布时间】:2018-05-07 06:54:30
【问题描述】:
我的数据库中有以下 3 个表,但在查询它们以获得我想要的结果时遇到了一些问题。我正在尝试按成分搜索食谱。
SQL 小提琴:Fiddle
这是我的表格: 成分
+---------------+---------+
| ingredient_id | name |
+---------------+---------+
| 1 | tomato |
| 2 | onion |
| 3 | rice |
| 4 | chicken |
| 5 | beef |
| 6 | noodles |
| 7 | salt |
+---------------+---------+
食谱
+-----------+------------------+
| recipe_id | name |
+-----------+------------------+
| 1 | tomato goodness |
| 2 | meat deluxe |
| 3 | chicken surprise |
+-----------+------------------+
成分索引
+-----------+---------------+
| recipe_id | ingredient_id |
+-----------+---------------+
| 1 | 1 |
| 1 | 5 |
| 1 | 7 |
| 2 | 5 |
| 2 | 6 |
| 2 | 7 |
| 3 | 4 |
| 3 | 3 |
| 3 | 7 |
+-----------+---------------+
我想要实现的是过滤我可以使用指定成分制作的所有食谱。问题来了:
这个查询:
select DISTINCT r.name
from
recipes r
inner join ingredient_index i
on i.recipe_id = r.recipe_id
where i.ingredient_id IN (2, 7, 5);
给我错误的结果,因为我没有足够的原料来制作任何食谱,但我仍然得到一个我可以制作所有这些的结果。发生这种情况是因为 recipe_id 在 Ingredient_Index 表中重复。
如果有任何帮助,我将不胜感激。
【问题讨论】:
-
要么计算成分以使它们都存在,要么检查没有缺少成分。
-
你能告诉我怎么做吗?我很难弄清楚这一点。
-
这是一个非常有趣的问题,我想我会把它放在我学生的下一个测试中}:-)
-
@Cynical,还添加一个预计会找到的配方。