当使用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)
答案 0 :(得分:1)
此行为绝对正确 - NULL被认为没有任何价值,并且与您提供的任何IN
或NOT IN
列表都不匹配。如果要避免使用OR,可以使用COALESCE替换已知的未使用值:
and
(COALESCE(t.status, 'NULL') NOT IN ('Cancelled', 'Duplicate'))
答案 1 :(得分:1)
修复你的括号:
and
(t.status NOT IN ('Cancelled', 'Duplicate')
or t.status IS NULL)
您输入的查询会返回status IS NULL
的所有行,无论他们是否为latest_record='Y'
。