关于NULL值在WHERE中判断出现的问题
本帖最后由 sh98_wgf 于 2012-11-05 16:03:33 编辑
有个语句的条件如下,当 A.BinIP和B.BinIP都不为空时,可以正常判断相等或不相等,但如果有一个的值是NULL,另外一个为非NULL,判断结果居然为真。这是怎么回事?字段类型为varbinary
WHERE A.BinIP<>B.BinIP
------最佳解决方案--------------------where 对null都是认为false啊。
------其他解决方案--------------------这个不会吧,默认情况下,null和任何值比较都为假
------其他解决方案--------------------任何值和null比较,都会返回false,而where的本质是只对true的那些数据返回,所以应该会找不到数据。
------其他解决方案--------------------可以考虑使用isnull()函数,可以把null值辅以一个乱七八糟的值,使得非null那列一定不等于null值那列
------其他解决方案--------------------说错了,如果一个为NULL,一个非NULL,以下条件为假。应该是不相等啊,应该为真啊
WHERE A.BinIP<>B.BinIP
------其他解决方案--------------------那我的条件该怎么改呢,要把BinIP不相等的记录选出来,一个是NULL另一个是非NULL的我要选出来
------其他解决方案--------------------这样写也太难过了吧
where ( a.BinIP<>b.binip OR (A.BinIP IS NULL AND B.BinIP IS Not NULL) OR (A.BinIP IS Not NULL AND B.BinIP IS NULL))
------其他解决方案--------------------where ISNULL(a.BinIP,0)<>ISNULL(b.binip,-1)
可不可以这样呢?
换上面的0和-1分别换成a.BinIP、b.binip不可能存在的值