美文网首页
一次小小的mysql grouo by优化

一次小小的mysql grouo by优化

作者: JAVA编程手记 | 来源:发表于2018-08-28 13:50 被阅读24次

场景

有a和b两张表

a表left join b表 on a.id = b.id

查询出a表的其他字段,以及b表的name字段

a表的id字段与b表的id字段是一对多关系,所以导致一条数据可能变多条

需要的结果中name字段的为综合结果,以逗号隔开 如 zhangsan,lisi,wangwu

需要使用groupby 其他字段,并且将name字段用group_concat函数包裹

栗子

a表:

id 其他字段
1 其他值
2 其他值

b表:

id name
1 zhangsan
1 lisi
1 wangwu
2 lisi
2 wangsu

sql

select a.id,a......,gorup_concat(b.name,',')
from a 
left join b
on a.id =b.id
group by 
a......

结果

a.id a...... b.name
1 a..... zhangsan,lisi,wangwu
2 a..... lisi,wangwu

优化

由于a表的其他字段过多,groupby其他无用的字段会有很大的消耗
所以可以先只查出来a.id和b.name group by a.id 然后与a表做left join

select a.....,c.name
from a
left join
(
    select a.id,group_concat(b.name,',')
    from a left join b
    on a.id = b.id
    group by a.id
) c 
on a.id =c.id

相关文章

网友评论

      本文标题:一次小小的mysql grouo by优化

      本文链接:https://www.haomeiwen.com/subject/wbwfwftx.html