我注意到MySQL中的一些奇怪的东西,我想知道它为什么会这样,并且有办法改变它?
方案
我的帐户InnoDB表包含以下列id, name, type
,其中类型为null。
现在,假设我有10条记录,其中type =" TEST"和他们type IS NULL
的100条记录以及类型=" STANDARD"
如果我运行此查询
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;
这可能是预期的行为,但我不确定为什么它的设计是这样的
答案 0 :(得分:3)
SELECT * FROM accounts WHERE type <> "TEST"
本声明的含义是,
&#34;从列类型的值不等于&#39; TEST&#39;的帐户中选择行。 &#34;
这意味着mysql返回的类型值不等于&#34; TEST&#34;的记录。
现在这里,因为NULL意味着没有值,所以它不会返回那些没有类型列值的记录。
答案 1 :(得分:1)
NULL
表示“无法知道/不知道该值”:与“无值”不同 - 根据不可用的值无法进行比较。