我想创建一个删除查询来从一个表中删除记录,根据是否有一个字段存在于另一个主表中。情况是我正在将新记录导入到数据库中,但是我想要删除已导入的记录,,即已在主表中拥有一个帐户。然而,我需要加入的字段并不相同:它带有一个固定的三字母代码XYZ前缀。避免加入MS Access删除查询
tbl_to_import.Account master_table.Account
123456 XYZ.123456
345678 XYZ.345678
要避免使用删除查询我尝试以下联接:
Delete tbl_to_import.*
From tbl_to_import
Where Exists(Select master_table.Account From master_table
Where master_table.Account = ("XYZ."& tbl_to_import.Account)) = True;
但是,查询获取访问挂断了电话。我不确定我做错了什么。我没有收到错误消息,但查询运行时没有产生任何内容,最终我终止了它。在这种情况下,tbl_to_import有2,700条记录,master_table有50,000条记录。另外,我通过ODBC连接到master_table。
最初,我使用连接构造了两个查询来执行删除操作。 tbl_to_import.Account有一个称为ID的主键。一个查询,qry_find_existing_accounts,位于所述ID号码tbl_to_import对此有在master_table.Account存在对应的帐户:
SELECT DISTINCTROW tbl_to_import.ID AS DELETEID
FROM tbl_to_import LEFT JOIN master_table
ON ("XYZ."& tbl_to_import.Account) = master_table.Account
WHERE ((("XYZ." & [Account])=[master_table].[Account]));
然后我用这个查询来构建删除查询:
DELETE DISTINCTROW tbl_to_import.*, tbl_to_import.ID
FROM tbl_to_import RIGHT JOIN qry_find_existing_accounts
ON tbl_to_import.ID =qry_find_existing_accounts.DELETEID
WHERE (((tbl_to_import.ID)=[qry_find_existing_accounts].[DELETEID]));
查询qry_find_existing_accounts工作正常;但是,当我试图运行第二个查询来删除时,我得到了错误:无法从指定表中删除。通常,当我得到这个错误时,这是因为我没有选择唯一的记录,但是,我在这两个查询中都使用了DISTINCTROW。
任何想法我做错了什么,我如何能够完成我需要做的事情?
这很奏效。我所做的加速是使用make table查询创建master_table的本地副本,当我这样做时,我只是删除了字母前缀。我也把帐户作为当地主人的主要关键,而且速度非常快。谢谢! – regulus