非IN子句和空值这个问题出现时,我得到了不同的记录计数,我认为是相同的查询之一使用not in where约束和另一个约束left join..的桌子not in约束有一个空值(坏数据),这将导致该查询返回0条记录的计数。我有点理解为什么,但是我需要一些帮助来充分理解这个概念。简单地说,为什么查询A返回一个结果而B不返回?A: select 'true' where 3 in (1, 2, 3, null)B: select 'true' where 3 not in (1, 2, null)这发生在SQLServer 2005上。我还发现set ansi_nulls off使B返回结果。
3 回答
青春有我
TA贡献1784条经验 获得超8个赞
select 'true' where 3 = 1 or 3 = 2 or 3 = 3 or 3 = null
3 = 3
select 'true' where 3 <> 1 and 3 <> 2 and 3 <> null
ansi_nulls
3 <> null
ansi_nulls
3 <> null
繁花不似锦
TA贡献1851条经验 获得超4个赞
3 = 1 or 3 = 2 or 3 = 3 or 3 = nullwhich is: FALSE or FALSE or TRUE or UNKNOWN which evaluates to TRUE
3 <> 1 and 3 <> 2 and 3 <> nullwhich evaluates to: TRUE and TRUE and UNKNOWN which evaluates to: UNKNOWN
select 'true' where 3 <> nullselect 'true' where not (3 <> null)
冉冉说
TA贡献1877条经验 获得超1个赞
NOT IN
当与未知值比较时,返回0条记录。
NULL
NOT IN
NULL
NULL
0
NULL
添加回答
举报
0/150
提交
取消