从MySQL JSON字段中提取去重城市列表的SQL查询
重点:数据库有一个城市字段,是一个json数组(["北京市", "上海市", "广州市"]),每条数据的城市可能重合,通过下面SQL可返回去重后的城市列表,mysql版本要5.7以上才支持。
SQL如下:
SELECT DISTINCT TRIM(JSON_UNQUOTE(JSON_EXTRACT(城市json字段名, CONCAT('$[', n.n, ']')))) AS city FROM 表名 JOIN ( SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 ) n WHERE JSON_LENGTH(城市json字段名) > n.n;
上面sql中需要将城市json字段名替换为你的表中真实字段名以及将表名替换为你的真实表名。
如我的表名和字段名为:
最终SQL:
我的表数据如下:
可以发现有很多重复的城市数据,执行该SQL最终的结果为:
达到了去重的目的。
如果通过代码来去重的话,就麻烦很多,得拿到所有数据,再遍历,新建zset list存放去重后的城市列表,而通过sql的话就很省事了。
可能性能会差点,我1000条数据查询要0.04秒左右。
看一下执行计划:
需要全表扫描和临时表,我这还没加索引。
这篇分享文章就到这里啦!如果你对文章内容有疑问或想要深入讨论,欢迎在评论区留言,我会尽力回答。同时,如果你觉得这篇文章对你有帮助,不妨点个赞并分享给其他同学,让更多人受益。
想要了解更多相关知识,可以查看我以往的文章,其中有许多精彩内容。记得关注我,获取及时更新,我们可以一起学习、讨论技术,共同进步。
感谢你的阅读与支持,期待在未来的文章中与你再次相遇!
我的微信公众号:【xdub】,欢迎大家订阅,我会同步文章到公众号上。