[英]!= in MySQL not working as I expected
我有一个工作正常的查询,然后我想向现有的where条件中添加类似以下内容:and some_column!= 1
该列值为空。 但是查询停止查找它曾经查找的行。 知道为什么吗?
谢谢。 亚历克斯
几乎每种形式的SQL都以处理比较中的空值而臭名昭著。 如果列是可为空的,并且想要对其进行比较,则应使用ISNULL:
WHERE ISNULL(column_name, -1) != 0
那应该解决您的问题。
几乎所有带有null的表达式都为null。 1 != null
为UNKNOWN(因此将导致该行从结果集中删除)。 1 = null
为未知。 1 + null
为未知。
最重要的例外: null is null
为TRUE。
顾名思义,NULL是“未知值” ...因此,null!= 1是未知结果。 NULL 可能是1,也可能不是-但关键是SQL不会尝试猜测。 这是SQL处理值的一种怪异方式,但事实就是如此。
因此,如果要考虑可能的空值,则需要更改此位置:
AND some_column != 1 AND some_column IS NOT NULL
使用'<>'可能有效...可以尝试
where ISNULL(coloumn_name,1) <> 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.