Mysql JSON_EXTRACT 在执行 'not matching' 请求时忽略某些字段

Mysql JSON_EXTRACT ignore some fields when doing 'not matching' requests

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

每一行都没有完全相同的 JSON 数据结构。当我使用 JSON_EXTRACT 到 select 匹配条件的字段时一切顺利。

问题出在尝试 select 与条件不匹配的字段时。仅返回具有键的字段(当然不匹配数据)。

您会发现 a fiddle here 重现了此行为。

我认为这是有意为之的事情,但我想知道是否有一个 sugar 解决方法可以导致 fiddle 的第四个请求结果而无需添加其他条件(在实际情况下,请求是通过编程生成的基于特定的 API 语法并添加上下文条件会很痛苦)?

解决您的问题的一种方法是 select 与表达式匹配的 ID,然后根据您是否要检查匹配或不匹配例如

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