0

当运行下面的查询时,t.status is NULL它会给我不同的计数(我认为这是不正确的)。

如何获取计数NOT IN ('Cancelled', 'Duplicate')但在计数中包含NULL值行

对于以下查询,我得到的计数为423

    select count(*) from QC10.DEFECTS d 
inner join QC10.DEFECTS_TRAN t on D.RECORD_ID=T.DEFECT_ID_FK_DT 
where 
 T.LATEST_RECORD='Y'
 and
 (t.status NOT IN ('Cancelled', 'Duplicate'))

但是当我运行以下查询时,我得到8530作为计数

select count(*) from QC10.DEFECTS d 
inner join QC10.DEFECTS_TRAN t on D.RECORD_ID=T.DEFECT_ID_FK_DT 
where 
 T.LATEST_RECORD='Y'
 and
 (t.status NOT IN ('Cancelled', 'Duplicate'))
 or (t.status IS NULL) 
4

2 回答 2

1

这种行为是绝对正确的 - NULL 被认为没有价值,并且不会匹配您提供的任何INNOT IN列表。如果您想避免使用 OR,您可以使用 COALESCE 替换一个已知的未使用值:

and
(COALESCE(t.status, 'NULL') NOT IN ('Cancelled', 'Duplicate'))
于 2013-08-26T16:42:32.333 回答
1

只需修正括号:

and
 (t.status NOT IN ('Cancelled', 'Duplicate')
 or t.status IS NULL)

您键入的查询返回所有行 where status IS NULL,无论是否latest_record='Y'

于 2013-08-26T16:43:50.223 回答