场景
有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
网友评论