Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql “为什么?”';空'&引用;给出与“相同的结果”;“不为空”;_Mysql_Sql - Fatal编程技术网

Mysql “为什么?”';空'&引用;给出与“相同的结果”;“不为空”;

Mysql “为什么?”';空'&引用;给出与“相同的结果”;“不为空”;,mysql,sql,Mysql,Sql,我有一张桌子 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 我知

我有一张桌子

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

我知道这不是处理空值的方式。我应该使用
IF(更改的id不为NULL,'Y','N')
而不是
IF(更改的id!='NULL','Y','N')
。它们都给出了正确的结果。有人能解释一下为什么会这样吗?

可能是这样的:

SELECT 
    EID,
    Name,
    (
        CASE 
            WHEN NOT changed_id IS NULL OR NOT changed_id = 'NULL' 
            THEN 'Y' 
            ELSE 'N' 
        END 
    )AS FLAG
FROM 
    EMPLOYEE
更新

回答这个评论。我们需要检查
是否为空
和=
是否为空
。因为
NULL!='空“
NULL
永远不会等于
'NULL'
的字符串值

我建议OP检查插入或更新的位置,以便列的值成为字符串
'NULL'
,并确保它是
NULL
。那么OP不需要检查这两种情况

更新#2:

对于不熟悉这个主题的人来说,这是一个记住null是什么意思的好方法 要记住的是,就信息而言,“缺乏价值”并不重要 与“零值”相同;类似地,“缺少答案”也是一个问题 这和“拒绝的回答”不一样。例如,考虑 “胡安拥有多少本书?”问题的答案可能是“零”(我们不知道) 知道他没有)或“空”(我们不知道他有多少,或 不拥有)。在数据库表中,报告此答案的列 将以null值开始,并且不会使用 “零”,直到我们确定胡安没有书

参考:


我将解释我对
NULL
的观点,但有一个警告告诉你这是一个抽象的想法

NULL
什么都不是

如果你问5大于
NULL
,结果是否定的。如果你问5小于
NULL
,答案仍然是否定的,因为“NULL”是零,当你与
NULL
进行比较时,答案总是否定的


因此,当您询问时,如果一个变量等于
NULL
,则结果是
NULL
,因为没有任何变量可以等于
NULL

,请不要用大写字母喊叫。很难集中精力回答你的问题,也很难直截了当。感谢你的回复和建议。在我的例子中,我关注mysql中的“NULL”和NULL差异,因为它给了我正确的结果,即使是错误的逻辑,如果(changed_id!=“NULL”,“Y”,“N”)。@ASHISH.s:我更新了答案。你是说像这样吗?@ASHISH.S:没问题。很乐意帮忙;)这并没有回答这个问题(“为什么会这样?”)@RandomSeed:我更新了答案。对解释满意还是希望我进一步扩展?@ASHISH.S最重要的是,值
NULL
永远不等于字符串
'NULL'
(就这一点而言,它永远不等于任何字符串)。