【问题标题】:Why does "!= 'NULL'" give the same result as "is not NULL"为什么 "!= 'NULL'" 给出与 "is not NULL" 相同的结果
【发布时间】:2014-08-06 07:43:56
【问题描述】:

我有一张桌子

EID  Name     changed_id 
1    Ashish   (NULL)
2    Sudhir    (NULL)
3    AKASH     123456

查询

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')。他们都给出了正确的结果。谁能解释一下为什么会这样?

【问题讨论】:

标签: mysql sql


【解决方案1】:

可能是这样的:

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 值开始,并且不会更新为 “零”,直到我们确定胡安没有书。

参考:

【讨论】:

  • 感谢您的回复和建议。在我的情况下,我专注于 mysql 中的 'NULL' 和 NULL 差异,因为它给了我正确的结果,即使它是错误的逻辑 IF(changed_id !='NULL', 'Y','N')。
  • @ASHISH.S :我更新了答案。你的意思是这样吗?
  • @ASHISH.S :没问题。很高兴为您提供帮助;)
  • 这没有回答问题(“为什么会这样?”)。
  • @RandomSeed :我更新了答案。对解释感到满意还是希望我进一步扩展?
【解决方案2】:

我将解释我对NULL 的看法,但请注意这是一个抽象的想法。

NULL 什么都不是。

如果你问 5 是否大于NULL,结果是否定的。如果你问 5 小于 NULL,答案仍然是否定的,因为 'NULL' 什么都不是,当你将任何东西与NULL 比较时,答案总是否定的。

所以,当你问,如果一个变量等于NULL,结果是NULL,因为没有什么可以等于NULL

【讨论】:

  • @ASHISH.S 最重要的是,值NULL 永远不会等于字符串'NULL'(它永远 等于any 字符串)。
猜你喜欢
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 2016-09-05
相关资源
最近更新 更多