首页 文章

MS Access中具有NULL值比较的SQL查询

提问于
浏览
4

我试图比较两个表和输出结果,其中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 回答

  • 0

    您需要LEFT加入,而不是INNER加入 .

    from Table1 LEFT JOIN
    

    你可能想说:

    Select Table1.Column1, Table1.Column2, Table1.Column3, Table1.Column4
    from Table1 LEFT JOIN
         Table2
         ON Table1.Column1 = Table2.Column1 AND
            Table1.Column2 = Table2.Column2 AND
            Table1.Column3 = Table2.Column3
    WHERE Table1.Column4 & "" <> Table2.Column4 & "";
    

    将零长度字符串与字段连接将确保将显示值与null之间的比较 .

  • 4

    In SQL, not only is NULL not equal to anything, it’s also not unequal to anything.

    任何与NULL的比较(除了 IS NULL )都会产生UNKNOWN值,因此不会返回任何行 .

    作为一个例子(在这种情况下使用MySQL语法,但Access也一样);

    SELECT 1 FROM DUAL WHERE 0 = 0;
    SELECT 2 FROM DUAL WHERE 0 <> 1;
    SELECT 3 FROM DUAL WHERE NULL = NULL;
    SELECT 4 FROM DUAL WHERE NULL <> 1;
    

    查询1和2显然分别返回1和2,但查询3和4将(不太明显)返回任何内容 .

    有关详情,请访问this link (scroll to "Error 5") .

  • 0

    对于MS SQL:

    WHERE isnull(Table1.Column4,'')<> isnull(Table2.Column4,'')

    或者,要成为其他SQL实现的标准,请使用'coalesce'而不是'isnull'

相关问题