从MySQL JSON字段中提取去重城市列表的SQL查询

重点:数据库有一个城市字段,是一个json数组(["北京市", "上海市", "广州市"]),每条数据的城市可能重合,通过下面SQL可返回去重后的城市列表,mysql版本要5.7以上才支持。

SQL如下:

1
2
3
4
5
6
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 @   一方_self  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示