Mysql 通过映射表进行一对多联接查询

Mysql 通过映射表进行一对多联接查询,mysql,sql,join,Mysql,Sql,Join,这可能是一个非常基本的事情要做,但我不能很好地让它工作,我找不到一个例子,正是我所寻找的。假设我有三张桌子: animals: id, name, description foods: id, name, description animals_foods: animal_id, food_id 所以我是一个新的动物园管理员,我想看看所有的动物都会吃什么样的食物。我希望看到这样的输出: +--------+------------------------+ | animal |

这可能是一个非常基本的事情要做,但我不能很好地让它工作,我找不到一个例子,正是我所寻找的。假设我有三张桌子:

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 |
+--------+------------------------+

把桌子连在一起,按动物分组<代码>组\u 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

我使用两个单独的表来显示动物和食物,然后使用一个名为animals_foods的表来将动物映射到特定的食物

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

食物
1-牛肉
2-鸡肉
3-羔羊肉
4-苹果
5-干草
6-生菜
7-香蕉
8-胡萝卜

然后,将动物_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

令人惊叹的非常感谢。还有一个问题。如果我有一些动物没有列出任何食物,而我不想展示它们,那该怎么办?(对于食物,它们返回null)然后使用
内部连接
而不是
左连接