Informix 'not in' returns 令人困惑的结果

Informix 'not in' returns confusing result

我有一个困惑的问题: 考虑字段为 m21_nr 的两个表 mtst 和字段为 m22_tsnr 的 mlag。 这两个表都包含数千条记录,其中一些以 'M'

开头

查询

select m21_nr from mtst where m21_nr like "M%"

return大约有 500 个结果

SELECT m22_tsnr FROM mlag where m22_tsnr like "M%";

return 50 个结果

我想找到 mtst 中不在 mlag 中的所有数字

select m21_nr
from mtst
where m21_nr like "M%"
and m21_nr not in (select m22_tsnr from mlag  where m22_tsnr like 'M%')

似乎有效。 但是当我离开 select

中的 where 子句时
select m21_nr
from mtst
where m21_nr like "M%"
and m21_nr not in (select m22_tsnr from mlag)

我得到一个空结果!!!!!!!!好像缺失的数字突然出现了? 我已经检查了类型 - varchar(25) 和我在字段周围使用 trim 以确保没有空格破坏结果。

这一定是一个简单的愚蠢错误,但我没有找到解决方案。

问题可能出在这些表的 m21_nrm22_tsnr 列中的 null 值。所以当你使用not in时,相当于说

  m21_nr <> someval and m21_nr <> someval1 and ..m21_nr <> null

当它在列中遇到null时,计算结果为unknown,条件变为unknown。所以你不会在结果中得到任何行。

您可能必须在 where 子句中明确说明 m22_tsnr is not null