我正在尝试了解MySQL外部参照表和外键结构。
我有三个具有以下结构的表格;
table_food
| id | name |
| 1 | apple_pie |
| 2 | pumpkin_pie |
table_ingredient
| id | name |
| 1 | apple |
| 2 | pumpkin |
| 3 | milk |
| 4 | flour |
| 5 | soy_milk |
table_food_ingredient
| food_id | ingredient_id |
| 1 | 1 |
| 1 | 3 |
| 1 | 4 |
| 2 | 2 |
| 2 | 3 |
我知道如何从table_food_ingredient获取所有成分到apple_pie,应该是下面的代码
SELECT ingredient_id FROM table_food_ingredient WHERE food_id = 1;
但我无法弄清楚如何从所有匹配的ingredient_id获取food_id。
例如我想获取food_id如果我选择1,3和4的ingredient_id,它应该只给我food_id为1(apple_pie)
答案 0 :(得分:0)
试试这个
SELECT food_id FROM Table1 WHERE ingredient_id in(1,3,4)
GROUP BY food_id
HAVING count(distinct ingredient_id)=3;
ingredient_id in(1,3,4)
- 包含所有成分。count(distinct ingredient_id)=3;
- 数字应该是成分的数量IN
答案 1 :(得分:0)
首先,如果我理解正确,我们必须根据成分回收食物的数量。
我们想要检索单个结果,但该表包含单个ID的多行。
所以我们不能用简单的SELECT .. WHERE
来做到这一点。
您可以使用
WHERE
,GROUP BY
的组合来获得结果。
SELECT f.id, f.name
FROM table_food f
INNER JOIN table_food_ingredient fi
ON f.id = fi.food_id
WHERE fi.ingredient_id in(1, 3, 4)
GROUP BY f.id, f.name
HAVING count(distinct fi.ingredient_id) = 3;