2014-11-04 55 views
3

我注意到MySQL中有些奇怪的东西,我想知道为什么它会以这种方式运行,并且有办法改变它?为什么MySQL在查找不相等时忽略空值?

方案

我账户有以下的列id, name, type其中类型是InnoDB表一为空的。现在

,可以说我有10条记录,其中TYPE = “TEST” 和100条记录与他们type IS NULL和20条记录,其中TYPE = “标准”

如果我运行此查询

SELECT * FROM accounts WHERE type <> "TEST" 

此查询仅显示20条只有type =“STANDARD”的记录,并且忽略具有空值的100条记录。

要解决这一点,我会做这样的事情

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

OR

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

NULL值是指空 “又名没有价值”,并没有值意味着<> “TEST”

这可能是一个预期的行为,但我不知道为什么它的设计如此

+4

这是SQL标准。这就是'NULL'操作在语言中定义的方式。而'NULL'并不意味着“没有价值”;它意味着“未知”。 – 2014-11-04 18:03:27

+0

'<=>'那是什么? - 是MySQL的具体情况,是否有与在NOT()中包装相反的其他方式? – Jake 2017-10-11 05:48:09

回答

3
SELECT * FROM accounts WHERE type <> "TEST" 

这句话的意思是,

“从那里列类型的值不等于‘TEST’账户选择行”。

这意味着mysql返回具有不等于“TEST”的类型值的记录。
现在在这里,由于NULL意味着没有值,它不会返回那些没有任何类型列值的记录。

+0

谢谢您的解释:) – Jaylen 2014-11-04 22:24:27

1

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

+0

感谢您的帮助 – Jaylen 2014-11-04 22:23:37