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_nr
和 m22_tsnr
列中的 null
值。所以当你使用not in
时,相当于说
m21_nr <> someval and m21_nr <> someval1 and ..m21_nr <> null
当它在列中遇到null
时,计算结果为unknown
,条件变为unknown
。所以你不会在结果中得到任何行。
您可能必须在 where
子句中明确说明 m22_tsnr is not null
。
我有一个困惑的问题: 考虑字段为 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_nr
和 m22_tsnr
列中的 null
值。所以当你使用not in
时,相当于说
m21_nr <> someval and m21_nr <> someval1 and ..m21_nr <> null
当它在列中遇到null
时,计算结果为unknown
,条件变为unknown
。所以你不会在结果中得到任何行。
您可能必须在 where
子句中明确说明 m22_tsnr is not null
。