如何查询MySQL嵌套JSON对象中$.results包含false布尔值的行
MySQL JSON列查询
$.results下存在布尔false值的方案 适配MySQL 5.7版本方案
该方案利用JSON序列化后的字符串特征实现,实现成本最低:
- 实现思路:先提取
$.results节点,转成普通字符串后,匹配JSON序列化后布尔false的固定格式"任意key":false - 示例代码(请自行替换表名
your_table和JSON列名json_col):
SELECT * FROM your_table WHERE JSON_UNQUOTE(JSON_EXTRACT(json_col, '$.results')) LIKE '%"%":false%';
也可以用MySQL5.7支持的简写语法简化代码:
SELECT * FROM your_table WHERE json_col->>'$.results' LIKE '%"%":false%';
- 注意事项:如果你的业务场景中
$.results下存在值为字符串"false"的情况,该方法会误判。如果需要严格区分布尔false和字符串"false",建议使用MySQL8+的严谨方案。
适配MySQL 8.0+版本方案
该方案利用8.0新增的JSON_TABLE函数实现,逻辑严谨无歧义:
- 实现思路:将
$.results下的所有key拆分为临时行,逐个校验对应的值是否为布尔false,只要存在匹配就返回对应原行 - 示例代码:
SELECT DISTINCT t.* FROM your_table t, JSON_TABLE( JSON_KEYS(t.json_col, '$.results'), '$[*]' COLUMNS ( result_key VARCHAR(255) PATH '$' ) ) AS keys_temp WHERE JSON_EXTRACT(t.json_col, CONCAT('$.results.', keys_temp.result_key)) = FALSE;
内容的提问来源于stack exchange,提问作者PeterB
相关产品推荐
相关产品推荐

