MySQL JSON字段过滤查询:如何修改SQL排除home与away中id为11的数据
问题修正说明
- 原SQL存在逻辑运算符优先级错误:
AND优先级高于OR,原写法实际执行逻辑为(status = '3' AND home.id=10) OR (away.id=10),会把status不为3、仅away.id=10的条目也纳入结果,不符合基础筛选要求。 - 新增过滤规则:需要排除home.id=11 或 away.id=11的所有条目。
修改后SQL语句
SELECT * FROM table_name WHERE status = '3' -- 筛选home或away中id为10的条目,加括号保证逻辑优先级正确 AND (JSON_EXTRACT(home, '$.id') = 10 OR JSON_EXTRACT(away, '$.id') = 10) -- 过滤掉home、away字段中id为11的条目 AND JSON_EXTRACT(home, '$.id') != 11 AND JSON_EXTRACT(away, '$.id') != 11 ORDER BY id DESC LIMIT 10
如果使用MySQL 5.7及以上版本,还可以用简化的JSON访问语法优化可读性:
SELECT * FROM table_name WHERE status = '3' AND (home->'$.id' = 10 OR away->'$.id' = 10) AND home->'$.id' != 11 AND away->'$.id' != 11 ORDER BY id DESC LIMIT 10
内容的提问来源于stack exchange,提问作者XiaoHu
相关产品推荐
相关产品推荐

