我正在尝试使用此select语句但我的问题是我尝试在我的select语句中使用的此ID具有空值。即使ID 542具有空值,但我知道未来的事实将会有一个“完整”的状态。它的价值。 FLAG字段的3个可能值是COMPLETE,NOT COMPLETE和NULL。我想用这个select语句实现的目的是查看FLAG不是' COMPLETE'的所有记录。如果我现在运行我的查询,它将不会返回任何内容,但如果我删除FLAG<>' COMPLETE'然后它将返回记录ID 542,但标志值为空。 这是我的代码
SELECT ID, DT, STAT FROM myTable WHERE ID = 542 and FLAG <> 'COMPLETE'
答案 0 :(得分:2)
将NULL转换为文本:
SELECT ID, DT, STAT
FROM myTable
WHERE ID = 542 and ISNULL(FLAG,'NULL') <> 'COMPLETE'
答案 1 :(得分:1)
SELECT ID, DT, STAT
FROM myTable
WHERE ID = 542 and ISNULL(FLAG, 'NOT COMPLETE') <> 'COMPLETE'
由于FLAG
为空,因此无法与“完成”进行比较,而您错过了该条目......
或:
SELECT ID, DT, STAT
FROM myTable
WHERE ID = 542 AND (FLAG <> 'COMPLETE' OR FLAG IS NULL)
答案 2 :(得分:1)
欢迎使用SQL的三重逻辑!众所周知的兄弟true
和false
有一个名为unknown
的秘密继姐妹。与null
进行比较的结果始终为unknown
。
快速解决方法是添加明确的is null
支票:
where Flag is null or Flag <> 'COMPLETE'
请注意,not unknown
仍为unknown
,因此无法正常工作:
where not Flag = 'COMPLETE' -- Won't work
事实上,null
甚至不等于null
。但null
也不等于null
!
要获得更多乐趣,请查看维基百科。它有一整页专门用于three valued logic in SQL。