MySQL 8中如何在普通字段与JSON提取字段中搜索指定值?
问题修复方案
问题出在JSON_EXTRACT的返回值格式上:它返回的是带双引号的JSON格式字符串(例如"Elephant"),而普通字段customerNumber存储的是不带引号的纯字符串Elephant。当你用'Elephant'在IN条件中同时匹配这两类值时,带引号的JSON字符串无法和目标值匹配,导致查询无结果。
你可以通过以下两种方式修复:
方法1:用JSON_UNQUOTE去除JSON字符串的引号
SELECT * FROM tasks WHERE 'Elephant' IN(customerNumber, JSON_UNQUOTE(JSON_EXTRACT(outputFields, '$.action')), JSON_UNQUOTE(JSON_EXTRACT(outputFields, '$.animals')))
方法2:使用简写运算符->>(推荐)
->>是JSON_UNQUOTE(JSON_EXTRACT())的简写,能直接返回不带引号的字符串,代码更简洁:
SELECT * FROM tasks WHERE 'Elephant' IN(customerNumber, outputFields->>'$.action', outputFields->>'$.animals')
修改后,JSON提取的结果会和普通字段的字符串格式保持一致,IN条件就能正确匹配所有包含Elephant的记录。
内容的提问来源于stack exchange,提问作者Julien
相关产品推荐
相关产品推荐

