我已经注意到这个陈述,例如
SELECT * FROM mammals where animals <> "Dog"
过滤掉列动物上包含Dog的所有行,但也过滤掉动物为空的所有行。
这是正常的吗?
答案 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
注意:ISNULL
(https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_isnull)是另一个与COALESCE
类似的功能。但不同之处在于ISNULL
不是ANSI标准,因此应尽可能避免使用。