当前位置: 首页 > article >正文

Mysql JSON结果不能IN

开发中遇到这样一种场景,举例说音乐的专辑包含歌曲,假设歌曲放在music表,专辑放在album表,而专辑与歌曲的绑定关系,要么就存一个关联表music_ablum,要么就存一个json字段(music_list)在album表。

存一个关联表的做法比较常见,查询某个专辑下所包含的音乐,可以通过以下语句查询

SELECT * from music WHERE music_id IN (SELECT music_id from music_ablum where ma_id=1);

当时想着同理,存一个json字段在album表就省了关联表,谁知,用In查询时,数据不出来

SELECT * from music WHERE music_id IN (SELECT music_list from ablum where a_id=1);

初时以为哪里写错了,检查了一轮也没发现哪里的问题,用CAST(JSON AS CHAR)转换了还是没果,再加狠招,将SUBSTRING将数据截取成标准IN查询的样子。还是不行。

查看Mysql官方文档才发现
在这里插入图片描述
翻译成中文的意思是

JSON 值的比较和排序
可以使用 =、 <、 <=、 >、 >=、 和 运算符比较<>JSON 值 。 !=<=>

JSON 值尚不支持以下比较运算符和函数:

BETWEEN

IN()

GREATEST()

LEAST()

好吧,不支持的话,你还真没它办法。

总结一下:
1、双select的情况,用IN的时候要看select出来的结果类型是不是json类型,另外,不是简单的数据形式能对上就可以。

2、用Mysql解决此类问题还是加个关联表方便。用mongodb查询就另外设计表结构,毕竟两者是不同的,要用不同的思维来解决问题。


http://www.kler.cn/news/303972.html

相关文章:

  • ES基础知识
  • HarmonyOS学习(十二)——数据管理(一)分布式数据
  • 基于Ubuntu2404搭建mysql8配置远程访问
  • CAT1 DTU软硬件设计开源资料分析(TCP协议+GNSS定位版本 )
  • vue在一个组件引用其他组件
  • Docker Desktop 的安装与汉化指南
  • 【笔记】第二节 熔炼、轧制、热处理和焊接工艺
  • 供应RM500UCNAB-D10-SNADA模块
  • LLM的工作原理详解
  • 替代区块链
  • AI绘画:科技赋能艺术的崭新时代
  • vscode中使用go环境配置细节
  • Leetcode面试经典150题-162.寻找峰值
  • 《Docker:轻量级虚拟化解决方案》
  • Spring MVC 处理请求
  • 低代码-赋能新能源汽车产业加速前行
  • Anolis 8 NVME over TCP 配置使用
  • Qt-常用控件(3)-输入类
  • 【C++】深究C++三大特性之多态
  • 香港电讯SASE解决方案:终端与云端的安全护航
  • C语言 13 指针
  • 【Unity新闻】Unity将取消Runtime费用
  • Where I can save my openai-apikey safely for my flutter app
  • 【docker】docker 关键技术 —— 镜像制作
  • 宝塔部署Vue项目解决跨域问题
  • 【机器学习】自然语言处理中的Transformer模型:深度解析与前沿发展
  • 从GreaterWMS学习仓库管理系统
  • 在Word中,用VBA比较两段文本的相似度
  • AI创作新手册:精通Prompt提示词的提问策略
  • 基于鸿蒙API10的RTSP播放器(一:基本界面的实现)