首页 > 解决方案 > 从同一个表中查找数据

问题描述

我的桌子是:

登录ID 姓名 角色
12 美国广播公司 分析师
12 美国广播公司 文员
142 xyz 文员
142 xyz 经理
1 雅什 经理
1 雅什 首席执行官
2 阿拉夫 总统
2 阿拉夫 首席执行官

我想显示每个登录 ID 一次,如果它有两个或两个以上的角色,则预计会显示此结果:

登录ID 姓名 角色 角色
12 美国广播公司 文员 分析师
142 xyz 经理 文员
1 雅什 首席执行官 经理
2 阿拉夫 首席执行官 总统

但后来我能够编写以下查询:

select a.loginid,a.name,a.role,b.role 
from tb1 a,tb1 b 
where a.loginid=b.loginid and a.role<>b.role;

我能做些什么来解决这个问题?我得到的结果是:

登录ID 姓名 角色 角色
12 美国广播公司 文员 分析师
12 美国广播公司 分析师 文员
142 xyz 经理 文员
142 xyz 文员 经理
1 雅什 首席执行官 经理
1 雅什 经理 首席执行官
2 阿拉夫 首席执行官 总统
2 阿拉夫 总统 首席执行官

标签: mysqlsqljoin

解决方案


我建议您将角色聚合到一个列中:

select loginid, name, group_concat(role order by role) as roles
from t
group by loginid, name;

如果您想要角色的两列(如您提出的问题),您还可以使用min()and max()

select loginid, name, min(role), nullif(max(role), min(role))
from t
group by loginid, name;

推荐阅读