2017-09-05 112 views
1

我有一个表中的单个列,看起来像这样:对NULL列使用WHERE子句时,mySQL select查询不返回结果。

enter image description here

(场为NULL我使用QTODBC7.0执行SQL查询,而这个应用使得NULL字段查询显示为空白。结果,而不是显示文本“NULL”)

我有一个简单的SQL查询,如下所示:

select * from table where field3 <> 'randomstring' 

我希望查询返回的所有字段,其中场3不等于'randomstring'的值。

'field3'这一列不等于'randomstring'的值,因此它应该在查询中返回。

一个奇怪的事情发生了:

上述查询返回任何内容!

enter image description here

场3等于NULL,因此,它不等于因此“randomstring”,该行应该在我的查询返回的,但事实并非如此。

我做了一些测试,并发现,这是当field3为NULL但不是如果field3等于空白字符串(不为NULL)时引起的。

当field3中可能有NULL值时,如何使select语句正常工作?

+0

使用'栏3 IS NULL'检查null值

SELECT * FROM table WHERE field3 <> 'randomstring' or field3 IS NULL 

在这样的查询条件进行评估,以true如果字段3的值是NULL 。 – jarlh

+0

一个选项是['<=>'](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to)与操作符相等的NULL安全。 – wchiquito

回答

2

此行为是由作为SQL标准一部分的三值逻辑引起的。这意味着每个布尔条件可以评估为true,falseunknown,并且只有在条件为true时才返回该行。它被定义为如果在等式的一侧(或两者)上存在NULL值,则结果是unknown。在你的情况下,条件的结果是unknown当字段3是NULL。因此,你需要使用jarlh提出了一个解决方案:由于unknown or true = true

+0

很好的解释! – cleverpaul

相关问题