我正在尝试创建一个删除查询以根据另一个主表中是否存在一个字段来从一个表中删除记录。情况是我正在将新记录导入数据库,但我想删除已经导入的记录,即在主表中已经有一个帐户。但是,我需要加入的字段并不相等:它以恒定的三字母代码 XYZ 为前缀。
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;
但是,查询会在 Access 中挂起。我不确定我做错了什么。我没有收到错误消息,但查询运行时没有产生任何内容,我最终将其停止。在这种情况下,tbl_to_import 有 2,700 条记录,master_table 有 50,000 条记录。此外,我通过 ODBC 连接到 master_table。
最初,我使用连接构造了两个查询来执行删除。tbl_to_import.Account 有一个称为 ID 的主键。一个查询qry_find_existing_accounts在 tbl_to_import 中找到了在 master_table.Account 中存在对应帐户的 ID 号:
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。
任何想法我做错了什么以及如何完成我需要做的事情?