Mysql“;其中;筛选出无显式语句的空值
例如,我注意到这句话Mysql“;其中;筛选出无显式语句的空值,mysql,sql,Mysql,Sql,例如,我注意到这句话 SELECT * FROM mammals where animals <> "Dog" 从动物“狗”所在的哺乳动物中选择* 过滤掉列“动物”中包含Dog的所有行,但也过滤掉所有动物为空的行 这正常吗?是的 使用可为空的列时,您必须是空安全的: SELECT * FROM `mammals` WHERE COALESCE(`animals`, '-1') <> 'Dog' 从“哺乳动物”中选择*,它们在其中结合('animals','-1')“
SELECT * FROM mammals where animals <> "Dog"
从动物“狗”所在的哺乳动物中选择*
过滤掉列“动物”中包含Dog的所有行,但也过滤掉所有动物为空的行
这正常吗?是的
使用可为空的列时,您必须是空安全的:
SELECT * FROM `mammals` WHERE COALESCE(`animals`, '-1') <> 'Dog'
从“哺乳动物”中选择*,它们在其中结合('animals','-1')“Dog”
合并:
如果改为使用相等比较,则有一个nullsafe运算符:
SELECT * FROM `mammals` WHERE COALESCE(`animals`, '-1') <=> 'Dog'
从“哺乳动物”中选择*,它们在其中结合('animals','-1')“Dog”
相关SO资源:
注意:
ISNULL
()是另一个类似于COALESCE
的函数。但不同之处在于ISNULL
不是ANSI标准,因此应尽可能避免使用。这是否仍能有效地使用索引?我认为使用或fieldisnull
至少会使用一个索引,如果这个索引不能的话。