我在表格中只有一列,看起来像这样:
(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语句起作用?
此行为是由SQL标准的三值逻辑引起的。这意味着可以将每个布尔条件评估为true
,false
或者unknown
仅当条件为时才返回该行true
。定义为,如果NULL
等式一侧(或两侧)都有值,则结果为unknown
。在您的情况下,条件的结果是unknown
当field3为时NULL
。因此,您需要使用jarlh提出的解决方案:
SELECT * FROM table WHERE field3 <> 'randomstring' or field3 IS NULL
在这样的查询中,条件被评估为true
field3的值是否为NULL,因为unknown or true = true
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句