对NULL列使用WHERE子句时,mySQL select查询不会返回结果。

时间:2017-09-05 07:31:55

标签: mysql sql null

我在表格中有一个列,如下所示:

enter image description here

(field3为NULL。我使用QTODBC7.0执行SQL查询,此应用程序使NULL字段在查询结果中显示为空白,而不是显示文本'NULL')

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

select * from table where field3 <> 'randomstring'

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

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

发生了一件奇怪的事情:

以上查询不返回任何内容!

enter image description here

field3等于NULL因此,它不等于'randomstring'因此,该行应该在我的查询中返回,但事实并非如此。

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

当field3中可能有NULL值时,如何使select语句有效?

1 个答案:

答案 0 :(得分:2)

此行为是由作为SQL标准一部分的三值逻辑引起的。这意味着可以将每个布尔条件计算为truefalseunknown,并且仅当条件为true时才返回该行。定义如果等式(或两者)的一侧有NULL值,则结果为unknown。在您的情况下,当field3为unknown时,条件的结果为NULL。因此,您需要使用jarlh提出的解决方案:

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

在此类查询中,如果自true以来field3的值为NULL,则将条件计算为unknown or true = true