我有一个事件表,其中包含基本信息和 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/聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18043757/