2

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

水果

ID 值
1 苹果
2 梨
3 香蕉
4 葡萄

动物

ID 值
1 熊
2 猴
3 苹果
4 猪

这两个表之间没有定义的关系。

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

我尝试了以下查询来完成此操作:

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

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

无法从指定的表中删除。

我做错了什么,我能做些什么来解决这个问题?

4

1 回答 1

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 仍然要求数据库系统可以将其解析为特定表。

我猜你得到的错误是锁定行的问题(作为 INNER JOIN 的结果)。

于 2011-01-26T18:01:44.500 回答