1

我试图在 MS Acess 中提出一个查询来比较两个表。我的比较基于 4 个字段 postal_code、city、state 和 country。我希望能够获取 table1 中没有在 table2 中匹配的所有记录。

这是我的示例数据。我期待查询输出中有 2 条记录,我用“*”标记

table1
======

POSTAL_CODE CITY        STATE_PROV  COUNTRY_CODE
*12345      Union       NJ          US
45678       Hillside    NJ          US
*45678      Union       NJ          US



table2
======

POSTAL_CODE     CITY        STATE_PROV  COUNTRY_CODE
45678           Hillside    NJ          US

这是我尝试过的,但没有完成这项工作:

SELECT DISTINCT table1.*
FROM table1 LEFT JOIN table2 ON table1.POSTAL_CODE=table2.POSTAL_CODE
WHERE ((table2.POSTAL_CODE Is Null));

我该如何做到这一点?请让我知道任何建议。

谢谢你。

4

1 回答 1

2

ON表达式LEFT JOIN应包括您要匹配的所有 4 个字段。我也漏掉了DISTINCT

SELECT
    t1.POSTAL_CODE,
    t1.CITY,
    t1.STATE_PROV,
    t1.COUNTRY_CODE
FROM
    table1 AS t1
    LEFT JOIN table2 AS t2
    ON
            t1.POSTAL_CODE = t2.POSTAL_CODE
        AND t1.CITY = t2.CITY
        AND t1.STATE_PROV = t2.STATE_PROV
        AND t1.COUNTRY_CODE = t2.COUNTRY_CODE
WHERE t2.POSTAL_CODE Is Null;
于 2012-06-17T15:24:02.307 回答