访问追加查询重复结果

时间:2018-12-20 21:42:17

标签: sql ms-access append

我有一个追加查询

INSERT INTO SPLIT_EXPORT_X2_LOANNOTPRESENT
SELECT SPLIT_EXPORT_X2_2.*
FROM SPLIT_EXPORT_X2_2, IMPORT_CSV
WHERE (((SPLIT_EXPORT_X2_2.coll_key) Not In (Select [LoanIdentifier] from [IMPORT_CSV])));

应该根据贷款标识符追加SPLIT_EXPORT_X2_2表中未出现在IMPORT_CSV中的任何内容。

X2表中有很多列,我都需要附加它们。

作为问题的一个示例,如果IMPORT_CSV表中有20行,并且要追加1行。它将追加该行的20个副本。似乎它在每行上进行WHERE检查,并在不匹配时追加。通常,group by解决了这个问题,但是如果我使用星号附加,访问权限会通知我无法group by。我将不得不列出所有列,并为特定的列添加group by

还有什么可以代替的吗?

1 个答案:

答案 0 :(得分:2)

您无需在IMPORT_CSV子句中使用FROM,仅在子查询中就可以使用

INSERT INTO SPLIT_EXPORT_X2_LOANNOTPRESENT
    SELECT SPLIT_EXPORT_X2_2.*
    FROM SPLIT_EXPORT_X2_2
    WHERE (((SPLIT_EXPORT_X2_2.coll_key) Not In (Select [LoanIdentifier] from [IMPORT_CSV])));

我还建议使用NOT EXISTS代替NOT IN

INSERT INTO SPLIT_EXPORT_X2_LOANNOTPRESENT
    SELECT SPLIT_EXPORT_X2_2.*
    FROM SPLIT_EXPORT_X2_2
    WHERE NOT EXISTS (SELECT 1
                      FROM IMPORT_CSV
                      WHERE SPLIT_EXPORT_X2_2.coll_key = IMPORT_CSV.[LoanIdentifier]
                     );
如果子查询中的任何值为NOT IN,则

NULL将过滤掉所有行。