【问题标题】:Delete records from multiple tables in Access 2007从 Access 2007 中的多个表中删除记录
【发布时间】:2011-01-26 17:00:19
【问题描述】:

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

水果

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;

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

无法从指定的表中删除。

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

【问题讨论】:

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


    【解决方案1】:

    如果不建立关系以利用级联删除,那么您就不走运了。 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 的结果)。

    【讨论】:

    • 我不知道有任何 DBMS 可以在单个语句中执行此操作(除非级联删除或触发器,它们是不同形式的后续效果,不是语句的正确部分)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    相关资源
    最近更新 更多