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

MySQL嵌套JSON查询问题:如何筛选包含指定编号马匹的赛事记录

问题原因及解决方法

你的核心问题是针对JSON数组的查询方式错误:$.horses.number会返回一个包含所有马匹编号的JSON数组(比如你的示例数据会返回["6","5","2","7","9"]),直接和单个值2比较时,数组与单个值无法匹配,所以没有结果。

以下是几种正确的查询方式:

方法1:使用JSON_CONTAINS(最简洁)

直接检查horses数组中是否包含指定的JSON对象:

SELECT * FROM races 
WHERE JSON_CONTAINS(data->'$.horses', '{"number": "2"}');

注意:原数据中number是字符串类型,所以要传入字符串"2"而非数字2,保证类型匹配。

通过搜索值是否存在来筛选:

SELECT * FROM races 
WHERE JSON_SEARCH(data, 'one', '2', NULL, '$.horses[*].number') IS NOT NULL;

JSON_SEARCH会返回匹配值的JSON路径,若返回非空则说明存在目标马匹编号。

方法3:使用JSON_TABLE展开数组(适合需进一步处理马匹数据的场景)

将JSON数组转换为虚拟表,再进行筛选:

SELECT r.* 
FROM races r
JOIN JSON_TABLE(
    r.data->'$.horses',
    '$[*]' COLUMNS (horse_number VARCHAR(10) PATH '$.number')
) AS ht
WHERE ht.horse_number = '2';

内容的提问来源于stack exchange,提问作者jimbeeer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:07:09