我想創建一個刪除查詢來從一個表中刪除記錄,根據是否有一個字段存在於另一個主表中。情況是我正在將新記錄導入到數據庫中,但是我想要刪除已導入的記錄,,即已在主表中擁有一個帳戶。然而,我需要加入的字段並不相同:它帶有一個固定的三字母代碼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