一对多通过映射表连接查询

时间:2015-06-15 17:34:37

标签: mysql sql join

这可能是一个非常基本的事情,但是我不能完全开始工作,我找不到一个完全符合我要求的例子。说我有三张桌子:

animals: id, name, description
foods: id, name, description
animals_foods: animal_id, food_id

所以我是一个新的动物园管理员,我想知道所有动物会吃什么样的食物。我希望看到这样的输出:

+--------+------------------------+
| animal |         foods          |
+--------+------------------------+
| lion   | beef,chicken,lamb      |
| hippo  | apples,hay,lettuce     |
| monkey | apples,bananas.carrots |
+--------+------------------------+

2 个答案:

答案 0 :(得分:1)

将这些桌子连在一起并由动物分组。 group_concat可以为每个组合列出一个列表

select a.name as animal_name, group_concat(f.name) as foods
from animals a
left join animal_foods af on af.animal_id = a.id
left join foods f on af.food_id = f.id
group by a.name

答案 1 :(得分:-1)

我为动物和食物使用两张单独的桌子,然后是一张名为animals_foods的桌子,让我可以将动物映射到特定食物。

动物
1 - 狮子
2 - 河马
3 - 猴子

食品
1 - 牛肉
2 - 鸡肉 3 - 羊肉 4 - 苹果
5 - Hay
6 - 生菜
7 - 香蕉
8 - 胡萝卜

然后,animals_foods表将动物ID与每行相应的食物ID相应地映射。 (共9个)。

然后做

SELECT * from animals a LEFT JOIN animals_foods af ON a.animal_ID = af.animal_ID LEFT JOIN foods f ON af.food_ID = f.food_ID