从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】,欢迎大家订阅,我会同步文章到公众号上。

posted @ 2024-09-13 11:30  一方_self  阅读(9)  评论(0编辑  收藏  举报