我有一个令人费解的问题: 考虑两个表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)和我在字段周围使用修剪以确保没有空格破坏结果。
这一定是一个简单的愚蠢错误,但我找不到解决办法。
答案 0 :(得分:3)
问题可能出在这些表格的null
和m21_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
。