MySQL中如何从JSON数组提取满足双条件的对象?
解决JSON数组中同对象多条件匹配的SQL查询问题
问题分析
你原有的SQL语句错误在于:分别提取数组中所有title和所有applies值进行独立判断,只要数组里存在目标title和存在true的applies就会返回记录,但这两个条件可能来自不同对象,不符合“同一对象同时满足两个条件”的需求。
正确实现方法
方法1:使用JSON_CONTAINS直接匹配完整对象
适合简单的精确匹配场景,直接检查JSON列中是否包含同时满足两个属性的对象:
SELECT col FROM `table` WHERE JSON_CONTAINS(col, '{"title": "CALCULATED", "applies": true}');
方法2:使用JSON_TABLE展开数组后过滤
适合复杂查询场景(如需要提取匹配对象、多条件组合等),将JSON数组转换为行数据后再筛选:
SELECT DISTINCT t.col FROM `table` t JOIN JSON_TABLE( t.col, '$[*]' COLUMNS( title VARCHAR(255) PATH '$.title', applies BOOLEAN PATH '$.applies' ) ) jt WHERE jt.title = "CALCULATED" AND jt.applies = true;
注:DISTINCT用于避免原表记录因匹配多个对象被重复返回。
方法3:使用JSON路径条件表达式(MySQL 8.0+支持)
通过JSON路径的筛选语法,直接判断数组中是否存在满足条件的元素:
SELECT col FROM `table` WHERE JSON_EXTRACT(col, '$[*] ? (@.title == "CALCULATED" && @.applies == true)') IS NOT NULL;
内容的提问来源于stack exchange,提问作者user16608259
相关产品推荐
相关产品推荐

