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

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 值尚不支持以下比较运算符和函数:BETWEENIN()GREATEST()LEAST()

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

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

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


http://www.mrgr.cn/news/26745.html

相关文章:

  • C#实现串口中继
  • 原生js案例之面向对象的tab切换
  • 前端层面----监控与埋点
  • APP广告变现流量售卖,选择API还是SDK对接?
  • Auracast认证:蓝牙广播音频的革新之旅
  • 水位雨量自动监测站的工作原理
  • 基于TRIZ的救援机器人轻量化设计
  • 刚刚!1区top“灌水”神刊,39天Accepted!真正的沾边可录
  • 828华为云征文|华为云Flexus云服务器X实例部署Servas自托管书签管理工具
  • 揭秘高效日志管理:解锁数据宝藏,驱动业务精准决策
  • Java集合相关面试题
  • FLash存储
  • 下一代 AI 教育:知识图谱RAG + 多智能体,听老师的话没前途,让老师听你的才是正道
  • Android Studio:驱动高效开发的全方位智能平台
  • Java wrapperr打包springboot项目到linux和Windows
  • YOLOv5改进 | 模块缝合 | C3 融合Self-Calibrated Convolutions丰富特征图【CVPR2020】
  • Python-简介
  • Web 安全基础教程:从零基础入门到精通
  • B站宋红康JAVA基础视频教程(chapter14数据结构与集合源码)
  • 2024年9月中国数据库排行榜:openGauss系多点开花,根社区优势明显