MySQL 5.7中如何查询JSON数组meta->grant_ids是否包含值5?
解决MySQL 5.7中查询JSON数组包含指定值的问题
你的原语句无法生效的原因是:meta->>"$.grant_ids" 返回的是字符串形式的数组(比如"[5,7]"),用IN(5)是将这个字符串与数字5直接比较,显然无法匹配。在MySQL 5.7中,要查询JSON数组包含指定值,推荐使用以下两种方法:
方法1:使用JSON_CONTAINS函数
这是最直接的方式,专门用于检查JSON文档是否包含指定元素:
SELECT * FROM content.banners WHERE meta IS NOT NULL AND JSON_CONTAINS(meta->'$.grant_ids', CAST(5 AS JSON));
meta->'$.grant_ids'提取出grant_ids对应的JSON数组CAST(5 AS JSON)将数字5转换为JSON类型,确保与数组内的元素类型匹配- 加上
meta IS NOT NULL避免null值干扰查询结果
方法2:使用JSON_SEARCH函数
该函数会返回匹配元素的JSON路径,若存在则结果不为null:
SELECT * FROM content.banners WHERE JSON_SEARCH(meta, 'one', 5, NULL, '$.grant_ids') IS NOT NULL;
- 参数
'one'表示只返回第一个匹配的路径 '$.grant_ids'指定搜索范围为grant_ids数组
内容的提问来源于stack exchange,提问作者timpone
相关产品推荐
相关产品推荐

