如何使用Access中另一个表中的联接从一个表中删除项目?

时间:2013-07-12 15:08:05

标签: ms-access join sql-delete

我尝试了很多不同的方法,但是在所有这些方面都会出现奇怪的错误结果。我有一个主事务表:Transactions和一个查询ArchiveDelete,它根据LastModifyDate从临时表中查找新事务。我想在ConfirmationNumber中的Transactions = ConfirmationNumber中删除ArchiveDelete的交易。

我的第一次尝试很简单:

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个交易。

我还在此处尝试了使用存在删除: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

但是现在它要删除我表中的所有47073行,而不仅仅是匹配的183行。

我做错了什么?为什么这么难?

1 个答案:

答案 0 :(得分:2)

我相信因为ArchiveDelete是一个查询可能是你遇到麻烦的原因。尝试制作一个临时表ArchiveDeleteTemp(至少要测试)并改为使用它。

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