Mysql"其中"在没有显式语句

时间:2015-07-23 17:35:52

标签: mysql sql

我已经注意到这个陈述,例如

SELECT * FROM mammals where animals <> "Dog"

过滤掉列动物上包含Dog的所有行,但也过滤掉动物为空的所有行。

这是正常的吗?

1 个答案:

答案 0 :(得分:2)

是的。

使用可空列时,您必须是空的:

SELECT * FROM `mammals` WHERE COALESCE(`animals`, '-1') <> 'Dog'

合并:https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

如果你要使用相等比较,那么就有一个nullsafe运算符:

SELECT * FROM `mammals` WHERE COALESCE(`animals`, '-1') <=> 'Dog'

https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_equal-to

相关SO资源:MySQL comparison with null value

注意:ISNULLhttps://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_isnull)是另一个与COALESCE类似的功能。但不同之处在于ISNULL不是ANSI标准,因此应尽可能避免使用。