如何从sql中的多个表中删除一行?

时间:2012-05-04 15:59:52

标签: sql database ms-access

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

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

2 个答案:

答案 0 :(得分:1)

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

来自microsoft

  

如果您选择了级联删除相关记录复选框   任何时候删除主要记录中的记录,定义一个关系   表,Microsoft Access自动删除中的相关记录   相关表。例如,如果您从中删除客户记录   客户表,所有客户的订单都会自动删除   从订单表(这包括订单明细中的记录)   与订单记录相关的表格。从a删除记录时   带有级联删除相关记录的表单或数据表复选框   选中后,Microsoft Access会警告您相关记录也可能是   删除。但是,使用删除查询删除记录时,   Microsoft Access自动删除相关表中的记录   没有显示警告。

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

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

Delete one or more records from an Access database

答案 1 :(得分:0)

如果在两个表的列之间设置了外键,则必须先确保先删除子列,然后再删除主列。执行此操作的正确方法是在删除主服务器时设置约束,例如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]

另一个选项是以编程方式执行,首先删除子表中的行,然后删除主表。