我有三个表 admins,table2,table3
管理员结构是
admins_id | admin_name | admin_username
1 | ABC |1234
2 | Cde |456
表2结构为
table2mask |table2adminid | table2maskcount
mask1 |1 |30
mask2 |1 |60
table3结构为
table3mask |table3adminid | table3maskcount
mask1 |1 |30
mask2 |1 |70
mask3 |2 |10
我想要实现的是
username | mask |ttlCount
1234 | mask1 | 60
1234 | mask2 | 130
456 | mask3 | 10
我应该如何实现这个目标
我尝试使用下面给出的查询
SELECT admins.`admin_username`,
(table2.`table2maskcount`+table3.`table3maskcount`) AS ttl_counts from
admins inner join table2 on table2.`table2adminid` = admins.`admin_id` inner
join table3 on table3.`table3adminid` = admins.`admin_id` Where
table2.`table2mask`=table3.`table3mask`
但它没有给我准确的结果,它没有显示仅在任一表中可用的掩码计数
最佳答案
将admins
加入到其他2个表的并集,group by admin
和mask
并聚合:
select a.admin_username username, t.mask, sum(maskcount) ttlcount
from admins a inner join (
select
table2mask mask,
table2adminid adminid,
table2maskcount maskcount
from table2
union all
select * from table3
) t on t.adminid = a.admins_id
group by a.admins_id, a.admin_username, t.mask
参见 demo 。
结果:
| username | mask | ttlcount |
| -------- | ----- | -------- |
| 1234 | mask1 | 60 |
| 1234 | mask2 | 130 |
| 456 | mask3 | 10 |
关于mysql - 如何连接三个表,添加两个表中的两个单独的字段,然后最后按两个表中的两个单独的字段进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59211863/