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'
(就这一点而言,它永远不等于任何字符串)。