如何使用MySQL的group_concat函数快速做关联查询?

当我们需要做一对多的关联查询时,会很容易想到用left join来实现。例如,现有country表和city表之间建立了一对多的关联关系。如果要展示各国家以及城市列表,会很容易想到以下SQL:

SELECT  country, city FROM  country  LEFT JOIN city ON country.country_id = city.country_id

得到:

图片

这里虽然获取了所有国家的城市列表,但由于一对多的关系,会导致country有大量重复,total值也变得很大,如何把相同的国家城市折叠到一起呢?答案是使用Mysql的GROUP_CONCAT函数,它可以对父表分组后,把子数据合并到一起展示:

SELECT  country, GROUP_CONCAT(city.city) as citys FROM  country  LEFT JOIN city ON country.country_id = city.country_id  GROUP BY country.country

得到:

图片

如果需要对城市做条件匹配,还可以加上having子句:

SELECT  country, GROUP_CONCAT(city.city) as citys FROM  country  LEFT JOIN city ON country.country_id = city.country_id  GROUP BY country.country   HAVING citys like '%Yuzhou%'

得到:

图片

可以看出,使用好GROUP_CONCAT函数,能够快速地抓取子表中的数据做展示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘世中-迷途小书童

欢迎IT从业者的头脑风暴

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值