我有下面的查询(将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_user_associations(team_id,user_id)
(用户通过team_user_associations有很多团队)。
我需要的是将1个字段添加到结果中,该字段是用户所属的所有“team_name”的逗号分隔字符串。我无法弄清楚这里的方法是什么......它是否类似于子查询的结果,子查询记录集中的'team_name'字段是平坦的,以逗号分隔的字符串变为字段主要查询?
感谢您的帮助!
答案 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来检索团队名称列。