mysql - 从同一个表中查找数据
问题描述
我的桌子是:
登录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 | 阿拉夫 | 总统 | 首席执行官 |
解决方案
我建议您将角色聚合到一个列中:
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;
推荐阅读
- entity-framework - 使用 ef-core 迁移忽略一张表
- python - Julia 中的反向量化数组操作
- java - 总结数组列表中对象的值(Java)
- javascript - /path/:id 不切换视图时 Link 是 to={"/path/" + slug}
- css - Bootstrap 4中不重叠页脚的粘性列
- java - Eclipse/OSGI、Java 11、JAXB 和类加载器
- mysql - 是否可以编写一个 SQL 查询来返回另一个表中不存在的值?
- python - 将 PDF 保存到目录
- paypal - 我正在尝试连接到贝宝
- c# - 使用 xamarin 表单的带有可滚动标题的顶部 tabview