我试图在mysql中使用 case 时比较某些字段的值。我发现了奇怪的行为。所以我尝试了以下查询。它在mysql中返回false。我无法理解它背后的原因。任何帮助?
select if(null=null,'true','false');
答案 0 :(得分:2)
你应该使用IS
SELECT IF(NULL IS NULL,'true','false');
或者如果您正在比较其他字段名称,那么例如
SELECT * FROM `table_name` WHERE `field_name` IS NULL
或否定它
SELECT * FROM `table_name` WHERE `field_name` IS NOT NULL
答案 1 :(得分:1)
来自Working with null values页面的MySQL文档:
在您习惯之前,NULL值可能会令人惊讶。 从概念上讲,NULL表示“缺少未知值”并对其进行处理 与其他价值观略有不同。
由于NULL是“未知”,比较NULL = NULL也将是未知的并且将返回NULL,并且由于NULL不是TRUE,因此您的函数将返回'false'。
您可以使用IS NULL运算符:
SELECT IF(NULL IS NULL, 'true', 'false')
或者你也可以使用NULL-safe equal to operator:
SELECT IF(NULL <=> NULL, 'true', 'false')
答案 2 :(得分:1)
您也可以通过以下方式比较NULL:
SELECT IF (NULL<=>NULL,'True','False');
答案 3 :(得分:0)
NULL不是值;它缺乏价值。所以,从逻辑上讲,它无法与自身进行同等比较。
这不是MySQL特有的;这是在计算机编程领域发现的一种现象(虽然有一些值得注意的例外,例如C)。
运营商IS
执行更智能,无效的&#34;比较&#34;,NULL IS NULL
评估为TRUE
。