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

如何在MySQL中过滤JSON字段的两个指定属性(国家AU、占比20)?

针对你要筛选statistics表中stats JSON字段里包含国家为AU且占比20的城市记录的需求,这里给你两个实用的MySQL查询方案:

方案1:用JSON_CONTAINS直接匹配数组元素

这个方法语法简洁,适合快速匹配数组中符合结构的对象:

SELECT * 
FROM statistics
WHERE JSON_CONTAINS(
    stats->'$.stats.cities',
    JSON_OBJECT('country', 'AU', 'percentage', 20)
);

说明:

  • stats->'$.stats.cities' 先提取出JSON字段里的cities数组
  • JSON_OBJECT('country', 'AU', 'percentage', 20) 构造一个和目标城市元素结构完全一致的JSON对象
  • JSON_CONTAINS会检查数组中是否存在和这个对象完全匹配的元素,满足条件就返回对应的表行
方案2:用JSON_TABLE展开数组(更灵活)

如果之后需要对城市数据做更多筛选、排序或计算,推荐用JSON_TABLE把JSON数组转成关系型临时表,再关联查询:

SELECT s.*
FROM statistics s
JOIN JSON_TABLE(
    s.stats->'$.stats.cities',
    '$[*]' COLUMNS(
        country VARCHAR(2) PATH '$.country',
        percentage INT PATH '$.percentage'
    )
) AS city_stats
WHERE city_stats.country = 'AU' AND city_stats.percentage = 20;

说明:

  • JSON_TABLE把cities数组拆成一行行的结构化记录,每一行包含country和percentage两个字段
  • 通过JOIN关联原表后,用WHERE条件精准筛选出符合要求的记录,最终返回原表的完整数据

注意:JSON_TABLE是MySQL 8.0及以上版本才支持的功能,如果你的MySQL版本是5.7,优先用方案1就好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:51:00