从Access 2007中的多个表中删除记录

时间:2011-01-26 17:00:20

标签: sql ms-access ms-access-2007 sql-delete multiple-tables

使用以下数据,我试图从两个表中删除匹配的记录。

水果

ID值
1 Apple
2梨子 3香蕉
4葡萄

动物

ID值
1熊
2猴子 3 Apple
4猪

这两个表之间没有明确的关系。

由于“Apple”出现在两个表中,我想从每个表中删除此记录。

我尝试了以下查询来完成此任务:

DELETE DISTINCTROW Animals.*, Fruits.*
FROM Animals INNER JOIN Fruits ON Animals.Value = Fruits.Value;

但是,当我运行它时,我收到以下错误:

  

无法从指定的表中删除。

我做错了什么,我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:4)

如果没有建立关系来利用级联删除,那你就不走运了。 DELETE语句一次在一个表上工作(在幕后执行级联删除,如果有的话)。你别无选择,只能设计一些东西来完成你想要的东西。也许,通过宏,人们可以做一些像这样简单化的事情:

UPDATE Animals, Fruits SET Animals.Value="DELETED", Fruits.Value="DELETED" WHERE Animals.Value=Fruits.Value
DELETE Animals WHERE Animals.Value="DELETED"
DELETE Fruits WHERE Fruits.Value="DELETED"

如果没有制作复杂的VBA宏(也许是一个临时表),这就差不多了。

顺便说一句,我认为即使使用SQL Server或DB2等更重要的数据库也无法做到这一点;子查询或视图上的DELETE仍然要求DB系统可以将其解析为特定的表。

我猜你得到的错误是锁定行(由于INNER JOIN)。