1

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

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”字段被展平为一个逗号分隔的字符串,该字符串成为一个字段主要查询?

谢谢你的帮助!

4

2 回答 2

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
于 2012-05-19T19:54:02.267 回答
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 检索团队名称列。

于 2012-05-19T19:56:28.833 回答