当前位置:网站首页>MySQL_关于JSON数据的查询
MySQL_关于JSON数据的查询
2022-07-30 20:14:00 【bluepad】
MySQL中关于JSON类型数据的查询
导语
MySQL从5.7版本开始支持JSON格式的数据类型,JSON格式的字符串类型有如下优势:
1、存储在JSON列中的JSON文档会被自动验证。
无效的文档会产生错误;
2、最佳存储格式。
存储在JSON列中的JSON文档会被转换为允许快速读取文档元素的内部格式。
JSON格式的数据
{
"classInfo": [
{
"level": 1,
"classId": 1472869278473637889,
"parentId": 0,
"typeGroups": 1472869277552140288
},
{
"level": 2,
"classId": 1472869580589355009,
"parentId": 1472869278473637889,
"typeGroups": 1472869580531884032
},
{
"level": 3,
"classId": 1472869739033382914,
"parentId": 1472869580589355009,
"typeGroups": 1472869738959134720
},
{
"level": 4,
"classId": 1472875592394231810,
"parentId": 1472869739033382914,
"typeGroups": 1472875591372201984
}
],
"classValueInfo": {
"specs": [],
"basics": [
{
"valueIds": [],
"basicsType": "model",
"typeGroups": []
},
{
"valueIds": [
1470582565747314690
],
"basicsType": "内部品牌",
"typeGroups": [
1470582565592760320
]
},
{
"valueIds": [],
"basicsType": "适用品牌",
"typeGroups": []
}
],
"skuSpecs": [
{
"id": null,
"price": 100,
"skuCode": "1473137918587781120",
"upcCode": "1",
"inventory": 10,
"skuSpecInfos": [],
"thirdpartySkuCode": "1"
}
],
"attributes": [
{
"type": "重要属性",
"value": "1",
"typeGroups": 1470588912652648448,
"attributeId": 1470588912693956611,
"valueIdList": []
},
{
"type": "重要属性",
"value": "",
"typeGroups": 1470589592058593280,
"attributeId": 1470589592070541314,
"valueIdList": [
{
"valueId": 1470603255703789569,
"valueIdTypeGroups": 1470602701724946432
}
]
}
]
}
}
表信息
CREATE TABLE `product` (
`id` bigint NOT NULL,
`site_code` varchar(16) COLLATE utf8mb4_general_ci NOT NULL COMMENT '站点代码',
`product_code` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SPU代码',
`product_features` longtext COLLATE utf8mb4_general_ci COMMENT 'SPU 商品特征',
`product_m_describe` longtext COLLATE utf8mb4_general_ci COMMENT 'SPU M端描述',
`product_pc_describe` longtext COLLATE utf8mb4_general_ci COMMENT 'SPU PC端描述',
`product_class` json NOT NULL COMMENT '冗余的商品分类信息',
`spec_type` tinyint NOT NULL COMMENT '规格类型 1=单规格 2=多规格',
`url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '自定义Url',
`up_time` datetime DEFAULT NULL COMMENT '上架时间',
`down_time` datetime DEFAULT NULL COMMENT '下架时间',
`sort` int NOT NULL DEFAULT '0' COMMENT '排序',
`del_flag` tinyint NOT NULL DEFAULT '1' COMMENT '是否删除 0=删除,1=正常',
`create_by` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`create_time` datetime NOT NULL,
`update_by` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`update_time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='商品分类'
表结构不是重点,终点是存在JSON数据类型的字段,将JSON格式数据粘贴到对应的字段中即可,上面的表结构中product_class为Json数据类型的字段
开始查询
SQL语句
SELECT * FROM product WHERE del_flag=1
AND (JSON_CONTAINS(product_class>'$.classInfo',JSON_OBJECT('classId',1470584780293689347))
AND JSON_CONTAINS(product_class->'$.classInfo',JSON_OBJECT('classId', 1470585059726610434))
AND JSON_CONTAINS(product_class->'$.classInfo',JSON_OBJECT('classId', 1470592051933470721)))
查询结果

个人理解-关于SQL
JSON_CONTAINS(product_class->'$.classInfo',JSON_OBJECT('classId', 1470584780293689347))
官方文档中的解释
JSON_CONTAINS():JSON 文档是否包含路径中的特定对象
->:评估路径后从 JSON 列返回值;相当于 JSON_EXTRACT()。
JSON_OBJECT():创建 JSON 对象
SQL中包含的product_class是对应JSON格式的字段名,$.classInfo对应的是JSON数据中需要查询的列表,classId具体数据中的值
如果classInfo中包含有列表,name在查询的数据中classInfo的写法就要改变,继续"."下去,
例如:
'$.classInfo.A'
这里需要一直"."到你需要查询的那一级
结语
MySQL中关于JSON数据类型查询的方法当然不至这一种,有兴趣的可以具体去官网查看,
官网链接:MySQL官网-JSON函数参考
以上是个人理解,如果有不对的地方,希望博友指出
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- mysql慢查询优化
- Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘) 解决方案
- Frog jumping steps (recursive and non-recursive) ------- Xiaolele walks the steps
- MySQL mass production of data
- 用jOOQ 3.17投射类型安全的嵌套表记录
- Based on the face of the common expression recognition - model building, training and testing
- excel数字显示e+17怎么恢复?excel数字变成了小数点+E+17的解决方法
- 推荐系统:AB测试(AB Test)
- Brush questions record----string
- WPS表格怎么自动1234排下去?wps表格怎么自动生成序号?
猜你喜欢

WPS没有在任务栏显示所有窗口选项怎么回事?

我是一名阿里在职9年软件测试工程师,我的经历也许能帮到处于迷茫期的你

Mysql索引特性(重要)

化二次型为标准型

Is the iPhone really thirteen incense?The two generations of products are completely compared, perhaps the previous generation is more worth buying

Snowflake vs. Redshift的2022战报:两个数据平台谁更适合你?

第03章 用户和权限管理【1.MySQL架构篇】【MySQL高级】

vlookup函数匹配不出来的原因及解决方法

MySQL eight-part text recitation version

Cesium loads offline maps and offline terrain
随机推荐
为单行查询设置JDBC Statement.setFetchSize()为1的方法指南
HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界
excel数字显示e+17怎么恢复?excel数字变成了小数点+E+17的解决方法
推荐系统:AB测试(AB Test)
历史上的今天:Win10 七周年;微软和雅虎的搜索协议;微软发行 NT 4.0
PPT如何开启演讲者模式?PPT开启演讲者模式的方法
Swift简介
Brush questions record----string
推荐系统:概述【架构:用户/物品特征工程---->召回层---->排序层---->测试/评估】【冷启动问题、实时性问题】
linux下mysql8安装
推荐系统:实时性【特征实时性:客户端实时特征(秒级,实时)、流处理平台(分钟级,近实时)、分布式批处理平台(小时/天级,非实时)】【模型实时性:在线学习、增量更新、全量更新】
在jOOQ中获取数据的多种不同方式
Recommendation system-model: FNN model (FM+MLP=FNN)
MySQL大批量造数据
PHP低代码开发平台 V5.0.7新版发布
[NISACTF 2022]下
M3SDA: Moment matching for multi-source domain adaptation
MySQL six-pulse sword, SQL customs clearance summary
How to install and use PostgreSQL 14.4
Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘) 解决方案