我有两个表,每个表都有它的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
);
2条答案
按热度按时间wdebmtf21#
你需要处理
NULL
:从notin标签开始:
not in运算符是“not”逻辑运算符与“in”比较运算符的并集。它可用于指定不应出现在where子句中的多个值。注意,不在
<null>
从来都不是真的!iyr7buue2#
实际上,问题是存储在这两个表中的数据,有些值是null,而另一些是字符串
NOT UUID
串。我猜innodb试图理解存储变量的格式,然后处理它,我看不出有任何理由这样做,因为json对象是动态的。