我试图比较两个表和输出结果,其中table1中的列和table2中的相同列不相等 .
查询如下所示:
Select Table1.Column1, Table1.Column2, Table1.Column3, Table1.Column4
from Table1 INNER JOIN
Table2
ON Table1.Column1 = Table2.Column1 AND
Table1.Column2 = Table2.Column2 AND
Table1.Column3 = Table2.Column3
WHERE Table1.Column4 <> Table2.Column4;
Column1,Column2,Column3一起形成两个表的主键 .
当Column4缺少值(null)时,相应的记录不会显示为结果输出中的不匹配 .
(这也发生在其他列上,无论是Text还是Number或Date / Time数据类型)
任何意见?
3 回答
您需要LEFT加入,而不是INNER加入 .
你可能想说:
将零长度字符串与字段连接将确保将显示值与null之间的比较 .
In SQL, not only is NULL not equal to anything, it’s also not unequal to anything.
任何与NULL的比较(除了
IS NULL
)都会产生UNKNOWN值,因此不会返回任何行 .作为一个例子(在这种情况下使用MySQL语法,但Access也一样);
查询1和2显然分别返回1和2,但查询3和4将(不太明显)返回任何内容 .
有关详情,请访问this link (scroll to "Error 5") .
对于MS SQL:
WHERE isnull(Table1.Column4,'')<> isnull(Table2.Column4,'')
或者,要成为其他SQL实现的标准,请使用'coalesce'而不是'isnull'