https://www.cnblogs.com/lvxiangjack/p/5466358.html
需求:
SQL server 查询删除产品类型为“中央预订系统”的数据,但保留null值数据
在WHERE 客户等级 in (‘3’,‘6’,‘8’,‘9’,‘10’,‘1’,‘2’,‘A’,‘B’)基础上修改语句:
WHERE 客户等级 in (‘3’,‘6’,‘8’,‘9’,‘10’,‘1’,‘2’,‘A’,‘B’) AND 产品类型<>‘中央预订系统’;
出现问题:
不仅删除了产品类型为“中央预订系统”的数据,同时删除了null值数据。
原因:
转载自上述链接:
SQL的逻辑系统是三值逻辑系统——FALSE、TRUE、NULL三种值构成的逻辑系统。
在WHERE、HAVING、ON条件筛选中,只保留结果为TRUE的,而不处理FALSE及NULL的。但在完整性约束检查中,只有结果为FALSE
即:产品类型<>'中央预订系统’但是不为null值的为true,产品类型='中央预订系统’为false,还有null值。
结果只保留true,所以null值没有被保留。。。