フィールドの 1 つが別のマスター テーブルに存在するかどうかに基づいて、あるテーブルからレコードを削除する削除クエリを作成しようとしています。新しいレコードをデータベースにインポートしている状況ですが、すでにインポートされているレコード、つまりマスター テーブルに既にアカウントがあるレコードを削除したいと考えています。ただし、結合する必要があるフィールドは等しくありません。固定の 3 文字のコード 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 に接続しています。
最初に、結合を使用して削除を実行する 2 つのクエリを作成しました。tbl_to_import.Account には ID という主キーがあります。1 つのクエリqry_find_existing_accountsは、対応するアカウントが master_table.Account に存在する tbl_to_import の 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は正常に機能しました。ただし、削除する 2 番目のクエリを実行しようとすると、次のエラーが発生しました:指定されたテーブルから削除できませんでした。通常、このエラーが発生するのは、一意のレコードのみを選択していないためですが、両方のクエリで DISTINCTROW を使用しました。
私が間違っていることと、私がする必要があることをどのように達成できるかについてのアイデアはありますか?