我有一个追加查询
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
。
还有什么可以代替的吗?
答案 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
将过滤掉所有行。