Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql“;其中;筛选出无显式语句的空值_Mysql_Sql - Fatal编程技术网

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
至少会使用一个索引,如果这个索引不能的话。