首页 > 数据库 >从MySQL JSON字段中提取去重城市列表的SQL查询

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

时间:2024-09-13 11:24:51浏览次数:1  
标签:UNION 城市 SQL JSON SELECT MySQL 字段名

重点:数据库有一个城市字段,是一个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】,欢迎大家订阅,我会同步文章到公众号上。

标签:UNION,城市,SQL,JSON,SELECT,MySQL,字段名
From: https://www.cnblogs.com/shuinanxun/p/18411896

相关文章

  • YAML 与 JSON、XML 比较及 YAML 使用最佳实践
    YAML(YAMLAin'tMarkupLanguage的递归缩写)是一种人类可读的数据序列化格式,通常用于配置文件、数据交换和设置管理。它简洁且易于读写,尤其适合在编程语言之间传递配置数据。以下是一些YAML的基本概念和语法示例:基本语法键值对:name:JohnDoeage:30嵌套:person:name:JohnDoe......
  • MySQL数据库之存储引擎(附简历案例,客户案例)
     作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭:   云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客前言:在当今的信息化时代,数据库作为信息存储与管理的核心基础设施,其性能、可靠性和可扩展性直接决定了应用的运......
  • MySQL视图
    一、常见的数据库对象对象描述表(TABLE)表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记录数据字典就是系统表,存放数据库相关信息的表。系统表的数据通常由数据库系统维护,程序员通常不应该修改,只可查看约束(CONSTRAINT)执行数据校验的规则,用于保证数据完整性的规......
  • MySQL中的约束
    约束概述1.1为什么需要约束数据完整性(DataIntegrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条......
  • Go语言SQL操作实战
    关注TechLead,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,复旦机器人智能实验室成员,国家级大学生赛事评审专家,发表多篇SCI核心期刊学术论文,阿里云认证的资深架构师,上亿营收AI产品研发负责人。Go语言凭借其高效、简单的特性,逐......
  • 备份MySQL binlog
    以前备份binlog时,都是先在本地进行备份压缩,然后发送到远程服务器中。但是这其中还是有一定风险的,因为日志的备份都是周期性的,如果在某个周期中,服务器宕机了,硬盘损坏了,就可能导致这段时间的binlog就丢失了。而且,以前用脚本对远程服务器进行备份的方式,有个缺点:无法对MySQL服务器当......
  • PbootCMS无缝sqlite数据库转mysql数据库
    将PbootCMS的SQLite数据库无缝转换为MySQL数据库,可以遵循以下步骤。请注意,这里所说的“无缝”转换是指尽可能减少数据丢失和格式错误,但仍然需要确保转换后的数据能够正常工作。以下是详细的转换步骤:1.导出SQLite数据库打开SQLiteStudio或类似工具:使用SQLiteStud......
  • 未检测到您服务器环境的sqlite3数据库扩展,请检查php.ini中是否已经开启该扩展
    当你遇到“未检测到您服务器环境的sqlite3数据库扩展,请检查php.ini中是否已经开启该扩展”的提示时,这表明PHP当前的安装环境中没有启用SQLite3支持。SQLite3是一个轻量级的嵌入式数据库引擎,它通常用于不需要完整服务器端数据库解决方案的应用场景。解决方法1.检查 ph......
  • 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库
    昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所有的表通过showtables能看到,但是select的过程中却报“Tabledoesn'texist”。于是,建议他试试可传输表空间。同......
  • [极客大挑战 2019]LoveSQL 1
    启动靶机作者不建议使用sqlmap我们这里就进行手工注入用万能口令登录admin'or1=1#,详情见上文(https://www.cnblogs.com/m1saka1/p/18411197)登录成功获得用户名和密码,发现密码并没有卵用,只能换思路利用账号密码的回显页面进行sql注入爆破数据库由于网站自动转义,为了方......