MySQL 使用 Group By 来限制结果

标签 mysql sql

好的,所以我正在尝试执行一个包含 4 个表的查询, 用户、事件、event_roles、user_event_role。

用户可以担任多个角色。我想要做的是得到一个看起来更像这样的结果: 用户、事件、角色

因此,如果用户“Bill”与事件“Meeting”相关联,并且“Bill”扮演多个角色,而不是得到这样的结果:

user   event     role
--------------------------
bill   Meeting   admin
bill   Meeting   director

我怎样才能得到这样的结果

user   event     role    role
----------------------------------
bill   Meeting   admin   director

这是我尝试构建的查询。

Select * 
  FROM `users` u 
LEFT JOIN `event_role` er ON u.user_id = er.user_id 
LEFT JOIN `events` e ON er.event_id = e.event_id

最佳答案

你寻求的结果是不可能的。

但是有一些接近的东西:

SELECT
  user,
  event,
  group_concat(role SEPARATOR ',') as roles
FROM
  `users` u 
  LEFT JOIN `event_role` er
    ON u.user_id = er.user_id 
  LEFT JOIN `events` e
    ON er.event_id = e.event_id
GROUP BY u.user_id

这会产生:

user   event     roles
----------------------
bill   Meeting   admin,director

无论哪种情况,您都需要调整逻辑以正确解析它。

关于MySQL 使用 Group By 来限制结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14791936/

相关文章:

mysql - SQL 3 表连接

PHP和mysql的二进制日志文件

sql - MySQL 每天按值(value)排名

sql - 在数据库中存储标签。存储标签一次还是多次?

php - 将图片上传到服务器并将图片路径存储在mysql数据库中

sql - 使用 generate_series 和 left join 查询时出现重复值?

mysql - 加入两个表并按问题分组

MySQL 三表链式左连接,按最后一张表过滤

sql - 复杂的 SQL while 循环

mysql - 我可以安全地从 Centos Linux 中删除 mariadb 吗?