为什么"!=' NULL'"得到与&#34相同的结果;不是NULL"

时间:2014-08-06 07:43:57

标签: mysql sql

我有一张桌子

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')。他们都给出了正确的结果。任何人都可以解释为什么会这样吗?

2 个答案:

答案 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