MySQL外键和外部参照表

时间:2018-05-06 12:04:06

标签: mysql sql select

我正在尝试了解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)

2 个答案:

答案 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来做到这一点。

解决方案

解决方案的开头就在此链接enter image description here

  

您可以使用WHEREGROUP 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;