mysql外键和外部参照表

p1tboqfb  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(254)

我试图理解mysql外部参照表和外键结构。
我有三张表,结构如下:;
餐桌上的食物

| id | name        |
|  1 | apple_pie   |
|  2 | pumpkin_pie |

表1配料

| id | name       |
|  1 | apple      |
|  2 | pumpkin    |
|  3 | milk       |
|  4 | flour      | 
|  5 | soy_milk   |

餐桌食品配料

| food_id | ingredient_id |
| 1       | 1             |
| 1       | 3             |
| 1       | 4             |
| 2       | 2             |
| 2       | 3             |

我知道如何从表中得到配料食物配料得到所有配料苹果馅饼,应该是下面的代码

SELECT ingredient_id FROM table_food_ingredient WHERE food_id = 1;

但我想不出我是怎么从所有的配料中得到食物的。
例如,如果我选择配料id为1、3、4,我想得到食物id,而配料id应该只有1(苹果派)

flmtquvp

flmtquvp1#

试试这个

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` 
bihw5rsg

bihw5rsg2#

首先,如果我理解正确的话,我们必须根据配料恢复食物的数量。

有什么问题?

我们想检索一个结果,但表中包含多行单个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;

相关问题