DB2查询不返回具有空列值的行

DB2查询不返回具有空列值的行,db2,Db2,我正在编写DB2查询,试图返回包括NULL在内的所有行,ID不等于100时除外 但是,在查询下面运行时,我将获得所有需要的行,除非U4156\u GRPDC\u CLM\u FLDR\u EXTREF为NULL。这里有我遗漏的东西吗?请帮忙 SELECT OBJECT_ID, VERSION_STATUS, OBJECT_CLASS_ID, SECURITY_ID, SECURITY_FOLDER_ID, RECOVERY_ITEM_ID, U4156_GRPDC_CLM_F

我正在编写DB2查询,试图返回包括NULL在内的所有行,ID不等于100时除外

但是,在查询下面运行时,我将获得所有需要的行,除非
U4156\u GRPDC\u CLM\u FLDR\u EXTREF
NULL
。这里有我遗漏的东西吗?请帮忙

SELECT 
    OBJECT_ID, VERSION_STATUS, OBJECT_CLASS_ID, SECURITY_ID, 
    SECURITY_FOLDER_ID, RECOVERY_ITEM_ID, U4156_GRPDC_CLM_FLDR_EXTREF, 
    U9C48_CMACMCASEIDENTIFIER, U3E88_GRPDC_COMM_STTS
FROM
    OSDBUSR.DOCVERSION T0 
WHERE  
    U4156_GRPDC_CLM_FLDR_EXTREF <> 1000
选择
对象ID、版本状态、对象类ID、安全ID、,
安全文件夹ID、恢复项目ID、U4156 GRPDC CLM FLDR EXTREF、,
U9C48_CMACCaseIdentifier,U3E88_GRPDC_COMM_STTS
从…起
OSDBUSR.DOCVERSION T0
哪里
U4156_GRPDC_CLM_FLDR_EXTREF 1000

正如Micheal所说,
NULL=NULL
是错误的,相反地,
NULL-NULL
也是错误的。对于您的查询,
NULL 1000
也为false,因此列U4156\u GRPDC\u CLM\u FLDR\u EXTREF中带有
NULL
的行将与谓词不匹配,并将被过滤掉。如果愿意,您可以责怪Codd,但这正是null在SQL中的工作方式

因此,为了得到你想要的结果,你需要以下几点

SELECT 
    OBJECT_ID, VERSION_STATUS, OBJECT_CLASS_ID, SECURITY_ID, 
    SECURITY_FOLDER_ID, RECOVERY_ITEM_ID, U4156_GRPDC_CLM_FLDR_EXTREF, 
    U9C48_CMACMCASEIDENTIFIER, U3E88_GRPDC_COMM_STTS
FROM
    OSDBUSR.DOCVERSION T0 
WHERE  
    U4156_GRPDC_CLM_FLDR_EXTREF <> 1000
OR  U4156_GRPDC_CLM_FLDR_EXTREF IS NULL
选择
对象ID、版本状态、对象类ID、安全ID、,
安全文件夹ID、恢复项目ID、U4156 GRPDC CLM FLDR EXTREF、,
U9C48_CMACCaseIdentifier,U3E88_GRPDC_COMM_STTS
从…起
OSDBUSR.DOCVERSION T0
哪里
U4156_GRPDC_CLM_FLDR_EXTREF 1000
或U4156_GRPDC_CLM_FLDR_EXTREF为空
add“or U4156_GRPDC_CLM_FLDR_EXTREF为null”,并且记住null不能与任何东西进行比较,null=null为false