Mysql一对多关系leftjoin导致sum数据翻倍的解决方案
案例:数据表:群表(team)和 群标签关系表 (team_tag_relation)关系:一个群对应多个标签team表中有群人数字段,当leftjoin群标签关系表时,如果某个群拥有3个标签,则该群的数据会出现3次,导致进行sum(群人数)会sum多次,即群人数会翻3倍,造成数据错误。解决方案:避免直接将两个表进行leftjoin先处理群标签关系表(team_tag_relation),将多条数
·
案例:
数据表:
群表(team
)和 群标签关系表 (team_tag_relation
)
关系:一个群对应多个标签
team
表中有群人数字段,当leftjoin群标签关系表时,如果某个群拥有3个标签,则该群的数据会出现3次,导致进行sum(群人数)
会sum多次,即群人数会翻3倍,造成数据错误。
解决方案:
- 避免直接将两个表进行leftjoin
- 先处理群标签关系表(
team_tag_relation
),将多条数据聚合为一条,sql如下:
select
team_id,
GROUP_CONCAT(tag_id) as tag_ids
from team_tag_relation
group by team_id
- 将处理过的群标签关系表(
team_tag_relation
)和 群表(team
)进行左连接leftjoin
, sql如下:
select
sum(群人数),
team_id
from team t
left join (select team_id,GROUP_CONCAT(tag_id) as tag_ids from team_tag_relation group by team_id) as tt on tt.team_id = t.id
group by t.id
参考地址:https://blog.csdn.net/chang100111/article/details/117017988
更多推荐
已为社区贡献1条内容
所有评论(0)