【问题标题】:GROUP_CONCAT on two different tablesGROUP_CONCAT 在两个不同的表上
【发布时间】:2015-12-31 20:38:36
【问题描述】:

我有三张桌子:

员工

id  name
1   Alex
2   John
3   Peter

员工角色

id  role_name
1   Barber
2   Driver

assigned_roles

id  staff_id  role_id
1   1         1
2   1         2
3   2         1
4   3         2

我想得到输出。喜欢:

name   roles
Alex   [{'id':'1','role_name':'Barber'},{'id':'2','role_name':'Driver'}]
John   [{'id':'1','role_name':'Barber'}]
Peter  [{'id':'2','role_name':'Driver'}]

我在做:

SELECT
   staff.name,
   GROUP_CONCAT(DISTINCT assigned_roles.role_id) as roles
FROM staff
   LEFT JOIN assigned_roles
      ON assigned_roles.staff_id = staff.id
   LEFT JOIN roles
      ON roles.id = assigned_roles.role_id
GROUP BY
   staff.id

但是如何将角色名称添加到 GROUP_CONCAT 以获得我想要的输出?

【问题讨论】:

  • 以表格而不是 json 格式提供您想要的结果。
  • @RubahMalam 。 . .我认为目的是产生 JSON 格式。
  • 你为什么要这些有趣的角色?

标签: mysql select group-concat


【解决方案1】:

你可以这样构造最终结果:

SELECT s.name,
       CONCAT('[',
              GROUP_CONCAT(DISTINCT '{''id'':''', ar.role_id, ''',''role_name'':''', r.role_name, '''}'),
              ']')
FROM staff s LEFT JOIN
     assigned_roles ar
     ON ar.staff_id = s.id LEFT JOIN
     roles r
     ON r.id = ar.role_id
GROUP BY s.id;

所有这些单引号和不寻常的字符可能存在拼写错误。

【讨论】:

  • 是的,GROUP_CONCAT 表达式后缺少一个逗号 ))。谢谢,太好了!
猜你喜欢
  • 1970-01-01
  • 2012-03-25
  • 2017-04-27
  • 2011-11-22
  • 2012-05-29
  • 2014-07-19
  • 2019-04-28
  • 1970-01-01
  • 2015-02-15
相关资源
最近更新 更多