DB2查询未返回具有NULL列值的行

时间:2018-09-20 17:19:04

标签: db2

我正在编写DB2查询,其中我试图返回所有包含NULL的行,除非ID不等于100。

但是,在查询下面运行时,我得到了所有需要的行,除了U4156_GRPDC_CLM_FLDR_EXTREFNULL时。我在这里缺少什么吗?请帮忙。

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

1 个答案:

答案 0 :(得分:1)

正如米歇尔所说,NULL = NULL是错误的,反直觉的NULL <> NULL也是错误的。对于您的查询NULL <> 1000也是错误的,因此在U4156_GRPDC_CLM_FLDR_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