从SQL中的多个表中删除多行数据
我需要帮助进行SQL查询,当我删除主类别时,它应该删除我的子类别的所有数据以及与该子类别相关的所有产品。基本上是从3个表中删除数据从SQL中的多个表中删除多行数据,sql,Sql,我需要帮助进行SQL查询,当我删除主类别时,它应该删除我的子类别的所有数据以及与该子类别相关的所有产品。基本上是从3个表中删除数据 它可以在一个查询中完成吗?如果没有数据库引用,就无法提供代码示例。但是,如果所有表都具有相同的主键,则可以尝试使用内部联接 DELETE table1, table2, table3 FROM table1 INNER JOIN table2 ON table2.key = table1.key INNER JOIN table3 ON table3.key = t
它可以在一个查询中完成吗?如果没有数据库引用,就无法提供代码示例。但是,如果所有表都具有相同的主键,则可以尝试使用
内部联接
DELETE table1, table2, table3
FROM table1
INNER JOIN table2 ON table2.key = table1.key
INNER JOIN table3 ON table3.key = table1.key
WHERE table1.key = value;
键值应该是所有表的公共值。类似于“ID”的东西。您可以使用启用了“删除级联”设置的外键,而不是通过Sql解决它 如果您的数据库类型/版本支持它。
F.e 这样,当您从主表中删除时。然后,另一个表中引用这些已删除记录的记录也将自动删除 例如,在MS Sql Server中:
ALTER TABLE SubCategory
ADD CONSTRAINT FK_SubCategory_MainCategoryID_Cascade
FOREIGN KEY (MainCategoryID)
REFERENCES MainCategory(ID) ON DELETE CASCADE;
ALTER TABLE Products
ADD CONSTRAINT FK_Products_SubCategoryID_Cascade
FOREIGN KEY (SubCategoryID)
REFERENCES SubCategory(ID) ON DELETE CASCADE;
这是一种自动维护它们之间引用完整性的方法
之后,从MainCategory表中删除将从SubCategory表中删除相关记录。以及与已删除的子类别记录相关的产品
这是SQLite要演示的dbfiddle示例
另外,就我个人而言,我更喜欢在DELETE SET NULL上使用
,或者在DELETE SET DEFAULT n上使用,甚至使用触发器。当然,这需要在事后对未引用的记录进行额外的清理,例如通过预定的脚本。但它只是感觉不那么有害。因为这样一来,如果有人意外删除了本不该删除的主类别,则更容易修复 请先看一看您需要查看级联删除外键定义。这在很大程度上取决于您正在使用的实际、具体的RDBMS。。。。。请添加一个相关标签,以明确这一点!这是无效的标准SQL。您应该提到您的解决方案适用于哪个DBMS