You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:32:20