mysql - 为什么MySQL在查找不等于时会忽略空值?

标签 mysql null

我注意到 MySQL 中有一些奇怪的东西,我想看看为什么它会这样,是否有办法改变它?

场景

我的帐户 InnoDB 表包含以下列 id, name, type,其中类型可以为 null。

现在,假设我有 10 条记录类型 = "TEST"和 100 条记录 type IS NULL 和 20 条记录类型 = "STANDARD"

如果我运行这个查询

SELECT * FROM accounts WHERE type <> "TEST"

此查询只会向我显示 type = "STANDARD"的 20 条记录,它会忽略 100 条具有空值的记录。

要解决这个问题,我必须做这样的事情

SELECT * FROM accounts WHERE IFNULL(type,"") <> "TEST"

SELECT * FROM accounts WHERE (type <> "TEST" OR type IS NULL)

NULL 值表示空白“又名无值”,无值表示 <>“测试”

这可能是预期的行为,但我不确定为什么会这样设计

最佳答案

SELECT * FROM accounts WHERE type <> "TEST"

这句话的意思是,

“从帐户中选择列类型的值不等于‘TEST’的行”。

这意味着 mysql 返回类型值不等于“TEST”的记录。
这里,由于NULL表示没有值,所以不返回type列没有任何值的记录。

关于mysql - 为什么MySQL在查找不等于时会忽略空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26741894/

相关文章:

Java:异常本身为空

java - 为什么 (null +"").equals ("null") 在 Java 中返回 true ?

java - 错误 : incomparable types: double and <null>

java - 这些集合允许为空。为什么我不能添加空元素?

Mysql Workbench - 在 DOUBLE => 中插入带有逗号的数字 => 错误

mysql - 选择最近 7 天的最大值

php - 如果数据库中没有值我收到错误

mysql - 计算特定主题的两个不同表之间的喜欢和评论

MySQL:总结两条语句

java - 为什么 ArrayList 作为 HashMap 中的键不起作用?