案例:

数据表:
群表(team)和 群标签关系表 (team_tag_relation

关系:一个群对应多个标签
team表中有群人数字段,当leftjoin群标签关系表时,如果某个群拥有3个标签,则该群的数据会出现3次,导致进行sum(群人数)会sum多次,即群人数会翻3倍,造成数据错误。

解决方案:

  1. 避免直接将两个表进行leftjoin
  2. 先处理群标签关系表(team_tag_relation),将多条数据聚合为一条,sql如下:
select 
	team_id,
	GROUP_CONCAT(tag_id) as tag_ids 
from team_tag_relation
group by team_id
  1. 将处理过的群标签关系表(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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐