我正在编写DB2查询,其中我试图返回所有包含NULL的行,除非ID不等于100。
但是,在查询下面运行时,我得到了所有需要的行,除了U4156_GRPDC_CLM_FLDR_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
答案 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