我有一张桌子
EID Name changed_id
1 Ashish (NULL)
2 Sudhir (NULL)
3 AKASH 123456
QUERY
SELECT EID,Name,
IF(changed_id !='NULL','Y','N') AS FLAG
FROM EMPLOYEE
输出
EID Name FLAG
1 Ashish N
2 Sudhir N
3 AKASH Y
我知道这不是我应该如何处理NULL值的方式。我应该使用IF(changed_id is not NULL,'Y','N')
代替IF(changed_id !='NULL','Y','N')
。他们都给出了正确的结果。任何人都可以解释为什么会这样吗?
答案 0 :(得分:3)
也许是这样的:
SELECT
EID,
Name,
(
CASE
WHEN NOT changed_id IS NULL OR NOT changed_id = 'NULL'
THEN 'Y'
ELSE 'N'
END
)AS FLAG
FROM
EMPLOYEE
<强>更新强>
回答评论。我们需要检查IS NULL
和= 'NULL'
。因为NULL!='NULL'
的原因。 NULL
永远不会等于'NULL'
的字符串值。
我建议OP检查他插入或更新的实际位置,以便列的值成为字符串'NULL'
,并确保它是NULL
。然后OP不需要检查两种情况。
更新#2:
对于刚接触主题的人来说,一个记住null意味着什么的好方法 要记住,就信息而言,“缺乏价值”并非如此 与“零值”相同;类似地,“缺乏答案”是 与“不答案”不一样。例如,考虑一下 问题“胡安拥有多少本书?”答案可能是“零”(我们 知道他没有)或“无效”(我们不知道他拥有多少,或者 不拥有)。在数据库表中,报告此答案的列 将以值null开始,并且不会更新 “零”,直到我们确定胡安不拥有书籍为止。
参考:
答案 1 :(得分:1)
我将解释我对NULL
的看法,但警告你这是一个抽象的想法。
NULL
没什么。
如果你问5大于NULL
,结果是否定的。如果你问5小于NULL
答案仍然没有,因为'NULL'什么都不是,当你用NULL
比较任何东西时答案总是不是。
因此,当您询问,如果变量等于NULL
,则结果为NULL
,因为任何内容都不等于NULL
。