2

所以我必须在它们之间有关系的表 - 关系类型:一对多。我认为以下查询:

DELETE Orderstbl.*, ItemsInOrdertbl.*
FROM Orderstbl INNER JOIN ItemsInOrdertbl ON Orderstbl.OrderID = ItemsInOrdertbl.OrderId
WHERE (((Orderstbl.OrderID)=26));

将删除两个表中包含 OrderID = 26 的所有行,但令我惊讶的是它填充了以下错误:

could not delete from specified tables

试图在谷歌上找到答案,没有帮助提前感谢:D

4

2 回答 2

1

您还可以创建一个包含 的关系CASCADE DELETE,然后当您从其中删除时,它将从另一个删除

来自微软

如果您在定义关系时选中“级联删除相关记录”复选框,则每当您删除主表中的记录时,Microsoft Access 都会自动删除相关表中的相关记录。例如,如果您从“客户”表中删除客户记录,则所有客户的订单都会自动从“订单”表中删除(这包括“订单详细信息”表中与“订单”记录相关的记录)。当您在选中“级联删除相关记录”复选框的情况下从表单或数据表中删除记录时,Microsoft Access 会警告您相关记录也可能被删除。但是,当您使用删除查询删除记录时,Microsoft Access 会自动删除相关表中的记录而不显示警告。

使用CASCADE DELETE是一种简单而干净的方法,可以确保从两个表中删除正确的记录。

这是另一篇讨论 MS-Access 的 CASCADE DELETE 的文章。

从 Access 数据库中删除一条或多条记录

于 2012-05-04T16:02:36.250 回答
0

如果您在两个表的列之间设置了外键,则必须确保先删除子列,然后再删除主列。执行此操作的正确方法是在删除 master 时设置约束,例如 UPDATE 或 DELETE。该约束负责处理外键关系,因此您永远不会到处都是孤立行。

要在 MySQL 中创建约束(例如)...

[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

另一种选择是以编程方式进行,首先删除子表中的行,然后删除主表中的行。

于 2012-05-04T16:06:59.337 回答