从存储过程结果中删除重复的列行并连接其他列
Remove Duplicate Column Rows from Stored Procedure Result and concatenate other column
我有存储过程的代码:
BEGIN
SELECT teams.name,
IFNULL(users.email,'N/A') as email,
IFNULL(users.name,'N/A') as user_name,
IFNULL(team_user.role,'N/A') as role
FROM teams
LEFT JOIN team_user ON teams.id=team_user.team_id
LEFT JOIN users ON team_user.user_id=users.id
WHERE role is NULL
OR role='admin';
END
我想在 table 中显示存储过程的结果。以下是它显示的 table 的示例:
团队名称
用户名
团队 1
AdminUser1ForTeam1
团队 1
AdminUser2ForTeam1
第 2 队
AdminUser1ForTeam1
三队
AdminUser1ForTeam3
三队
AdminUser2ForTeam3
这个 table 的问题是,如果一个团队有超过 1 个管理员,团队名称将在两个单独的行中重复。以下是我想要达到的结果:
团队名称
用户名
团队 1
AdminUser1ForTeam1, AdminUser2ForTeam1
第 2 队
AdminUser1ForTeam1
三队
AdminUser1ForTeam3, AdminUser2ForTeam3
我尝试使用 group_concat,但是无法检测团队名称何时重复。
我也可以使用 php 来尝试实现结果。非常感谢任何帮助!
使用聚合。我怀疑你真的想要:
SELECT t.name,
COALESCE(GROUP_CONCAT(u.email), 'N/A') as email,
COALESCE(GROUP_CONCAT(u.name), 'N/A') as user_name,
COALESCE(GROUP_CONCAT(tu.role), 'N/A') as role
FROM teams t LEFT JOIN
team_user tu
ON t.id = tu.team_id AND tu.role = 'admin' LEFT JOIN
users u
ON tu.user_id = u.id
GROUP BY t.name
我有存储过程的代码:
BEGIN
SELECT teams.name,
IFNULL(users.email,'N/A') as email,
IFNULL(users.name,'N/A') as user_name,
IFNULL(team_user.role,'N/A') as role
FROM teams
LEFT JOIN team_user ON teams.id=team_user.team_id
LEFT JOIN users ON team_user.user_id=users.id
WHERE role is NULL
OR role='admin';
END
我想在 table 中显示存储过程的结果。以下是它显示的 table 的示例:
团队名称 | 用户名 |
---|---|
团队 1 | AdminUser1ForTeam1 |
团队 1 | AdminUser2ForTeam1 |
第 2 队 | AdminUser1ForTeam1 |
三队 | AdminUser1ForTeam3 |
三队 | AdminUser2ForTeam3 |
这个 table 的问题是,如果一个团队有超过 1 个管理员,团队名称将在两个单独的行中重复。以下是我想要达到的结果:
团队名称 | 用户名 |
---|---|
团队 1 | AdminUser1ForTeam1, AdminUser2ForTeam1 |
第 2 队 | AdminUser1ForTeam1 |
三队 | AdminUser1ForTeam3, AdminUser2ForTeam3 |
我尝试使用 group_concat,但是无法检测团队名称何时重复。 我也可以使用 php 来尝试实现结果。非常感谢任何帮助!
使用聚合。我怀疑你真的想要:
SELECT t.name,
COALESCE(GROUP_CONCAT(u.email), 'N/A') as email,
COALESCE(GROUP_CONCAT(u.name), 'N/A') as user_name,
COALESCE(GROUP_CONCAT(tu.role), 'N/A') as role
FROM teams t LEFT JOIN
team_user tu
ON t.id = tu.team_id AND tu.role = 'admin' LEFT JOIN
users u
ON tu.user_id = u.id
GROUP BY t.name