Informix'不在'返回令人困惑的结果

时间:2015-09-16 13:41:42

标签: sql informix

我有一个令人费解的问题: 考虑两个表mtst与字段m21_nr和mlag与字段m22_tsnr。 两个表都包含数千条记录,其中一些以“M”开头

查询

select m21_nr from mtst where m21_nr like "M%"

返回大约500个结果

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

返回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)和我在字段周围使用修剪以确保没有空格破坏结果。

这一定是一个简单的愚蠢错误,但我找不到解决办法。

1 个答案:

答案 0 :(得分:3)

问题可能出在这些表格的nullm21_nr列中的m22_tsnr值。因此,当您使用not in时,它相当于说

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

当它在列中遇到null时,它的计算结果为unknown,条件变为unknown。因此,您不会在结果中获得任何行。

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