mysql json“not in”不起作用

7z5jn7bk  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(470)

我有两个表,每个表都有它的json列。我想从第一行中选择不在第二行中的行,搜索条件是json的属性之一。 Request.Details->'$.Key' 有以下数据

"9523beaf-934b-e811-80d1-6a077df8507e"
"cf287991-434c-e811-80d1-6a077df8507e"
``` `Response.response->'$.Key'` 有以下数据

"9523beaf-934b-e811-80d1-6a077df8507e"

现在我测试了这个查询:

select msr.Details->'$.Key' m
from Request msr
where msr.Details->'$.Key' in (select response->'$.Key' from Response);

它工作正常并返回

"9523beaf-934b-e811-80d1-6a077df8507e"

但当我使用 `NOT IN` 它返回一个空表。

select msr.Details->'$.Key' m
from Request msr
where msr.Details->'$.Key' not in (select response->'$.Key' from Response);

wdebmtf2

wdebmtf21#

你需要处理 NULL :

select msr.`Details`->'$.Key' m 
from `Request` msr 
where msr.`Details`->'$.Key' not in (select COALESCE(`response`->'$.Key','') 
                                     from `Response`)

从notin标签开始:
not in运算符是“not”逻辑运算符与“in”比较运算符的并集。它可用于指定不应出现在where子句中的多个值。注意,不在 <null> 从来都不是真的!

iyr7buue

iyr7buue2#

实际上,问题是存储在这两个表中的数据,有些值是null,而另一些是字符串 NOT UUID 串。
我猜innodb试图理解存储变量的格式,然后处理它,我看不出有任何理由这样做,因为json对象是动态的。

相关问题