如何在MySQL嵌套JSON列中查询userId为22的数据?
MySQL嵌套JSON列查询userId为22的数据的解决方案
针对你提供的JSON结构{"data": [{"calendarId":"11","userId": "12"},{"calendarId":"21","userId": "22"}]},以下是几种可行的查询方法:
方法1:使用JSON_CONTAINS(最简洁)
直接检查data数组中是否包含userId="22"的元素:
SELECT * FROM your_table WHERE JSON_CONTAINS(column_field, '{"userId": "22"}', '$.data');
注意:JSON中
userId的值是字符串类型,查询时要带双引号保证类型匹配。
方法2:使用JSON_TABLE(适合需要提取数组元素的场景)
将JSON数组展开为行数据,再过滤目标userId:
SELECT t.*, j.calendarId, j.userId FROM your_table t JOIN JSON_TABLE( t.column_field, '$.data[*]' COLUMNS ( calendarId VARCHAR(20) PATH '$.calendarId', userId VARCHAR(20) PATH '$.userId' ) ) j WHERE j.userId = '22';
这种方式不仅能筛选出目标行,还能直接获取匹配项的calendarId等字段值。
方法3:使用JSON_SEARCH(通过路径判断存在性)
查找是否存在匹配userId的路径,返回非null即表示存在目标数据:
SELECT * FROM your_table WHERE JSON_SEARCH(column_field, 'one', '22', NULL, '$.data[*].userId') IS NOT NULL;
你之前尝试的问题分析
- 第一种语句
JSON_EXTRACT(column_field,'$.userId'):JSON根节点不存在userId字段,返回null,无法匹配。 - 第二种语句
JSON_EXTRACT(column_field,'$.data[*].userId'):返回的是数组["12","22"],直接与22比较时类型、结构均不匹配,无法相等。
内容的提问来源于stack exchange,提问作者neeraj
相关产品推荐
相关产品推荐

