我试图拉出两个字段不匹配的所有行。我理解空值本质上是“未知数”,因此已采取步骤将空值定义为0。如下所示。
Select ifnull(field1, 0), ifnull(field2, 0)
from table
where field1 != field2
谁能告诉我为什么这不起作用?即使我觉得我正确地使用ifnull(field1,0)将空值定义为“0”,我仍然没有得到任何结果。
答案 0 :(得分:2)
它不起作用,因为这是NULL
值在关系数据库中的工作方式。几乎所有的比较都会返回NULL
,这被视为错误。
此外,您在SELECT
中所做的事情对WHERE
没有影响。这些字段仍然来自原始表格。
更重要的是你能做什么。最简单的方法是使用NULL
- 安全比较:
where not field1 <=> field2
答案 1 :(得分:0)
因为在您选择
之后而不是之前插入0应该是:
Select * from
((Select *,ifnull(field1, 0) new_field1, ifnull(field2, 0) new_field2
from table) As query)
WHERE new_field1 != new_field2;
答案 2 :(得分:0)
您应该将IFNULL()向下移动到WHERE子句,如下所示:
Select ifnull(field1,0) as 'Field1', ifnull(field2, 0) as 'Field2'
from table
where ifnull(field1,0) != ifnull(field2,0)