我在表格中有一个列,如下所示:
(field3为NULL。我使用QTODBC7.0执行SQL查询,此应用程序使NULL字段在查询结果中显示为空白,而不是显示文本'NULL')
我有一个简单的SQL查询,如下所示:
select * from table where field3 <> 'randomstring'
我希望查询返回所有字段,其中field3不等于'randomstring'的值。
列'field3'不等于'randomstring'的值,因此,它应该在查询中返回。
发生了一件奇怪的事情:
以上查询不返回任何内容!
field3等于NULL因此,它不等于'randomstring'因此,该行应该在我的查询中返回,但事实并非如此。
我做了一些测试,发现这是因为当field3为NULL但不是如果field3等于空字符串(不是NULL)。
当field3中可能有NULL值时,如何使select语句有效?
答案 0 :(得分:2)
此行为是由作为SQL标准一部分的三值逻辑引起的。这意味着可以将每个布尔条件计算为true
,false
或unknown
,并且仅当条件为true
时才返回该行。定义如果等式(或两者)的一侧有NULL
值,则结果为unknown
。在您的情况下,当field3为unknown
时,条件的结果为NULL
。因此,您需要使用jarlh提出的解决方案:
SELECT * FROM table WHERE field3 <> 'randomstring' or field3 IS NULL
在此类查询中,如果自true
以来field3的值为NULL,则将条件计算为unknown or true = true