在mysql中,选择某field为不等于某值的时候,使用<>符号。但查bug时发现该field为null的并不能查出来。
查原因为:
null值不能与其他值进行比较,只能使用is null或is not null来进行判断。
所以,限制条件需要写:
(field is null or field<>VALUE)
这样才行。
参考链接:
http://jingyan.baidu.com/article/9113f81b2adc882b3214c7cb.html
MySql数据库中null值与其他值的比较
- |
- 浏览:2112
- |
- 更新:2013-11-28 11:05
- |
- 标签:mysql
数据库中存在null,那么怎样查找这些值是null的记录呢?
方法/步骤
-
查找到某一个字段是null的记录,最简单的想法可能是这样:
select *from tableName where columnName = null
但是这样是不行的,因为null不能和任何值比较。在SQL中,NULL值与任何其它值的比较(即使是NULL)永远不会为“真”。包含NULL的表达式总是会导出NULL值,除非在关于操作符的文档中以及表达式的函数中作了其他规定。
-
我曾经犯的错误如下:
注意,红色字体的查询条件只能查询出pass_name!='batch'且不为null的字段(null不能和任何值比较,即使是null也不会是true),如果需要查询出pass_name是null的字段,必须显示的加上:or pass_name is NULL
SELECT COUNT(*) FROM 表名 WHERE FROM_UNIXTIME(submit_time) >= '2012-08-01' AND FROM_UNIXTIME(submit_time) < '2013-07-01' AND pass_name <> 'test'(错误)
查询出包含null且pass_name!='batch'的数据:
SELECT COUNT(*) FROM 表名 WHERE FROM_UNIXTIME(submit_time) >= '2012-08-01' AND FROM_UNIXTIME(submit_time) < '2013-07-01' AND (pass_name <> 'test' or pass_name is null)(正确查出pass_name!=null及pass_name是null的)
-
null表示的含义是未知,即不知道有没有。和‘’空字符串不等,因为空字符串相当于没有值。null代表的是不知道有没有值。所以在数据查询中如果字段默认值是null,想查询出不等于某个条件的一定要加上——字段名 is null 或者字段名 is not null来包含是null或者不是null的字段
END