设为首页 加入收藏

TOP

一次小小的mysqlgrouoby优化
2018-08-31 18:27:19 】 浏览:80
Tags:一次 小小的 mysqlgrouoby 优化

场景

有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启动和关闭外键约束的方法解.. 下一篇sql将毫秒级的时间变为天数小时分..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目