gpt4 book ai didi

mysql - SQL 一对多 JOIN/Aggregate

转载 作者:行者123 更新时间:2023-11-29 01:42:10 29 4
gpt4 key购买 nike

我有一个 Events 表,其中包含基本信息和一个 Event.ID

然后我有多个类别,我将它们用作“标签”。

Event_Categories (stores each 'tag')
- id
- name

Events_Categories (links tags to event ID)
- event_id
- event_category_id

我需要执行一个 SQL 查询,它将返回事件信息以及所有标签。

SELECT  * FROM `events`
JOIN (`event_categories`
JOIN `events_categories` ON `event_categories`.`id` = `events_categories`.`event_category_id` )
ON `events`.`id` = `events_categories`.`event_id`

使用每个单独的标签多次返回“事件”。

当我追加 GROUP BY event_categories.name 时,它返回不同的事件,但只显示一个标签。

我确定这已在此处进行了介绍,但通过搜索,我找不到解决方案。

谢谢!

最佳答案

您想使用 group_concat() 获取类别名称列表:

SELECT e.*, group_concat(c.name)
FROM `events` e JOIN
`events_categories` ec
ON e.`id` = ec.`event_id` join
`event_categories` c
on ec.`event_category_id` = c.`id`
group by e.`id`;

编辑:

要将此操作作为外部连接来获取所有事件,即使上面没有标签,只需将 join 替换为 left join:

select e.*, group_concat(c.name)
from `events` e left join
`events_categories` ec
ON e.`id` = ec.`event_id` left join
`event_categories` c
on ec.`event_category_id` = c.`id`
group by e.`id`;

关于mysql - SQL 一对多 JOIN/Aggregate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18043757/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com