0

私はこれをさまざまな方法で試しましたが、それらすべてで奇妙な結果が得られます。トランザクションのマスター テーブルがあります:に基づいて一時テーブルから新しいトランザクションを検索Transactionsするクエリです。in = in のトランザクションを削除したいのですが。ArchiveDeleteLastModifyDateConfirmationNumberTransactionsConfirmationNumberArchiveDelete

私の最初の試みは簡単でした:

DELETE Transactions.*
FROM Transactions INNER JOIN ArchiveDelete ON Transactions.ConfirmationNumber = ArchiveDelete.ConfirmationNumber;

「指定されたテーブルから削除できませんでした」というエラーが表示されました。ヘルプをクリックしても意味がありません。私はテーブルに対する完全な権利を持っています。エラーを Google で検索しようとしましたが、代わりにこれを実行することをお勧めします。

DELETE Transactions.*
FROM Transactions Where Transactions.ConfirmationNumber in (Select ConfirmationNumber from ArchiveDelete)

しかし、これには永遠に時間がかかり、単純な削除に一日中費やすことはできません。削除する必要があるトランザクションは 183 件だけです。

また、Exists を使用して削除を試みました: How to delete in MS Access when using JOIN's?

DELETE Transactions.*
FROM Transactions 
Where Exists(Select 1 from ArchiveDelete Where ArchiveDelete.ConfirmationNumber = Transactions.ConfirmationNumber) = True

しかし、今では、一致する 183 行だけでなく、テーブル内の 47073 行すべてを削除したいと考えています。

私は何を間違っていますか?なぜこれが難しいのですか?

4

1 に答える 1

2

ArchiveDeleteクエリが原因で問題が発生している可能性があるためだと思います。ArchiveDeleteTemp代わりに(少なくともテストするために)一時テーブルを作成し、代わりにそれを使用してみてください。

DELETE Transactions.*
FROM Transactions INNER JOIN ArchiveDeleteTemp ON Transactions.ConfirmationNumber = ArchiveDeleteTemp.ConfirmationNumber;
于 2013-07-12T16:04:49.490 に答える