在对存储在Mysql数据库中的JSON数据执行一些选择JSON_EXTRACT请求时遇到了一些麻烦。
每一行没有完全相同的 JSON 数据结构。当我使用 JSON_EXTRACT 选择与条件匹配的字段时,一切进展顺利。
问题在于尝试选择与条件不匹配的字段时。仅返回具有键的字段(当然不匹配数据)。
您会在此处找到重现此行为的小提琴。
我认为这是意料之中的事情,但我想知道是否有一种糖变通方法可以在不添加其他条件的情况下导致小提琴的第四个请求结果(在实际情况下,请求是根据特定的 API 语法以编程方式生成的,添加上下文条件会很痛苦)?
解决问题的一种方法是选择与表达式匹配的 id,然后在IN
或NOT 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
来否定匹配。
演示