结果集中来自关联表的展平字符串字符串作为逗号分隔字符串

时间:2012-05-19 19:34:25

标签: mysql

我有下面的查询(将select中的所有字段缩短为*)。

SELECT u.*, e1.*, e2.*
FROM employee_db e1
JOIN employee_db e2 ON e1.manager_id = e2.id
JOIN users u ON u.id = e1.id

还涉及两个表:

  • 团队(需要分配用户的'team_name'的扁平版本 到团队)
  • team_user_associations(team_id,user_id)

    (用户通过team_user_associations有很多团队)。


我需要的是将1个字段添加到结果中,该字段是用户所属的所有“team_name”的逗号分隔字符串。我无法弄清楚这里的方法是什么......它是否类似于子查询的结果,子查询记录集中的'team_name'字段是平坦的,以逗号分隔的字符串变为字段主要查询?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

SELECT  u.*, e.*, e2.*, GROUP_CONCAT(t.team_name)
FROM    employee_db e
JOIN    employee_db e2
ON      e2.id = e.manager_id
JOIN    users u
ON      u.id = e.id
JOIN    team_user te
ON      te.user_ud = u.id
JOIN    teams t
ON      t.id = te.team_id
GROUP BY
        u.id

答案 1 :(得分:0)

您可以尝试类似下面的解决方案:

SELECT u.*, e1.*, e2.*, 
       GROUP_CONCAT(t.team_name ORDER BY t.team_name) AS team_names
FROM employee_db e
JOIN employee_db e2 ON l.manager_id = l2.id
JOIN users u ON u.id = l.id
JOIN team_user_associations ta ON ta.user_id = u.id
JOIN teams t ON ta.team_id = t.id
GROUP BY user_id

尝试并告诉我它是否有效,如果不了解其他表的结构和目的,则很难。 无论如何,诀窍是通过加入团队/用户关联来扩展行,并使用GROUP BY再次减少它们。现在聚合了关联,您可以使用GROUP_CONCAT来检索团队名称列。