美文网首页
一次小小的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