为什么MySQL在寻找不相等时会忽略空值?

时间:2014-11-04 18:01:33

标签: mysql null

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

方案

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

现在,假设我有10条记录,其中type =" TEST"和他们type IS NULL的100条记录以及类型=" STANDARD"

的20条记录

如果我运行此查询

SELECT * FROM accounts WHERE type <> "TEST"

此查询只显示20条记录类型=&#34; STANDARD&#34;只有它忽略了100个具有空值的记录。

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

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

OR

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

NULL值表示空白&#34;也就是没有值&#34;没有价值意味着&lt;&gt; &#34; TEST&#34;

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

2 个答案:

答案 0 :(得分:3)

SELECT * FROM accounts WHERE type <> "TEST"

本声明的含义是,

&#34;从列类型的值不等于&#39; TEST&#39;的帐户中选择行。 &#34;

这意味着mysql返回的类型值不等于&#34; TEST&#34;的记录。
现在这里,因为NULL意味着没有值,所以它不会返回那些没有类型列值的记录。

答案 1 :(得分:1)

NULL表示“无法知道/不知道该值”:与“无值”不同 - 根据不可用的值无法进行比较。