我在MySQL表中有一个名为CODE的列,它可以是NULL。假设我有一些CODE ='C'的行,我想在我的select结果集中忽略它。我的结果集中可以有CODE = NULL或CODE!='C'。
以下查询不返回CODE为NULL的行:
SELECT * from TABLE where CODE!='C'
但是这个查询按预期工作,我知道这是正确的方法。
SELECT * from TABLE where CODE IS NULL OR CODE!='C'
我的问题是为什么只有CODE!='C'不返回CODE = NULL的行?绝对'C'不是NULL。我们在这里没有比较一个角色的价值。有人可以说明为什么它不起作用?
在MySQL中,NULL
被认为是“缺失的,未知的价值”,而不是没有价值。看看at this MySQL Reference on NULL。
任何与NULL
的算术比较都不会返回true或false,而是返回NULL
。因此,NULL != 'C'
返回NULL
,而不是返回true。
与'NULL'的任何算术比较都将返回false。要在SQL中检查:
SELECT IF(NULL=123,'true','false')
要检查NULL
值,我们需要使用IS NULL
和IS NOT NULL
运算符。
基于我的测试和文档:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
您可以使用<=>比较null并获取布尔结果 注意:它看起来像NOT EQ运算符,但它是EQ运算符
例如:
select x <=> y;
or
select @x <=> @y;
这也比较字符串与null,字符串与字符串等。
在SQL中,NULL值是一个特殊值,与任何其他值无法比较。与NULL直接比较的结果总是为NULL,尽管(不幸的是)在某些实现中可能会发现FALSE。
要测试空值,您应该使用IS NULL
和IS NOT NULL
。
SELECT *
FROM `table_name`
WHERE IFNULL(`column_name` != 'C', TRUE)
select * from user,其中application_id ='1223333344'且name为null;