使用以下数据,我试图从两个表中删除匹配的记录。
水果
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;
但是,当我运行它时,我收到以下错误:
无法从指定的表中删除。
我做错了什么,我该怎么做才能解决这个问题?
答案 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)。