Mysql JSON_EXTRACT执行“不匹配”请求时会忽略某些字段

时间:2019-01-18 03:21:09

标签: mysql json json-extract

当对存储在Mysql数据库中的JSON数据执行某些select JSON_EXTRACT请求时,遇到了麻烦。

每行都不具有完全相同的JSON数据结构。当我使用JSON_EXTRACT选择符合条件的字段时,一切进展顺利。

问题是当尝试选择不符合条件的字段时。仅返回具有键的字段(尽管当然不匹配数据)。

您会发现a fiddle here再现了这种行为。

我认为这是预期的事情,但我想知道是否有一个糖解决方法可以导致小提琴的第四个请求结果而无需添加其他条件(在实际情况下,请求是根据特定的API语法以编程方式生成的,并添加上下文条件会很痛苦)?

1 个答案:

答案 0 :(得分:1)

解决问题的一种方法是选择与表达式匹配的id,然后根据要检查匹配还是不匹配,在INNOT IN表达式中使用它们,例如

SELECT *
FROM `test`
WHERE id IN (SELECT id
             FROM `test` 
             WHERE data->>'$.test' = 'passed');

SELECT *
FROM `test`
WHERE id NOT IN (SELECT id
                 FROM `test` 
                 WHERE data->>'$.test' = 'passed');

查询中唯一的区别是添加了单词NOT来否定匹配项。

Demo