将NULL与INT进行比较



我正在尝试拉取两个字段不匹配的所有行。我知道null本质上是"未知数",因此已采取步骤将null定义为0。如下所示。

Select ifnull(field1, 0), ifnull(field2, 0) 
from table
where field1 != field2

有人能告诉我为什么这不起作用吗?尽管我觉得我用ifnull(field1,0)正确地将null定义为"0",但我仍然没有得到任何结果。

它不起作用,因为NULL值在关系数据库中就是这样工作的。几乎所有的比较都返回NULL,这被视为错误。

此外,您在SELECT中所做的操作对WHERE没有影响。字段仍然来自原始表。

更重要的是你能做什么。最简单的方法是使用NULL安全比较:

where not field1 <=> field2

因为0是在选择之后而不是之前插入的

应该是:

Select * from 
((Select *,ifnull(field1, 0) new_field1, ifnull(field2, 0) new_field2
from table) As query)
WHERE new_field1 != new_field2;

您应该将IFNULL()向下移动到WHERE子句,如下所示:

Select ifnull(field1,0) as 'Field1', ifnull(field2, 0) as 'Field2'
from table
where ifnull(field1,0) != ifnull(field2,0)

相关内容

  • 没有找到相关文章

最新更新