MySQL删除多个表中的多行

时间:2016-08-16 18:22:12

标签: mysql sql

在一个查询中,有没有办法一次删除三个表中的多个记录?

  

类别:
id,名称

sub_categories:
id,category_id,   名称

项目:
id,subcategory_id,name

我有id我需要删除的类别。例如,5

SQL查询必须删除具有id的类别。

categories.id = 5

此外,它必须删除该类别中的所有子类别。

sub_categories.category_id = categories.id

最后,删除那些在步骤2中删除的子类别中的所有项目。

items.subcategory_id = sub_categories.id

2 个答案:

答案 0 :(得分:2)

尝试 ON Delete Cascade

CREATE TABLE categories(
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id )
) ENGINE=InnoDB;


CREATE TABLE sub_categories(
  id int(11) NOT NULL AUTO_INCREMENT,
  category_id int(11) NOT NULL,      
  PRIMARY KEY (id),
  FOREIGN KEY (category_id) 
  REFERENCES categories (category_id) 
  ON DELETE CASCADE
) ENGINE=InnoDB;

答案 1 :(得分:1)

如果使用ON DELETE CASCADE引入外键约束,可以从多个表中删除一种方法。

这是另一种方式:

DELETE C,SC,I
FROM categories C 
INNER JOIN sub_categories SC ON C.id = SC.category_id
INNER JOIN items I ON SC.id = I.subcategory_id
WHERE C.id = 5;

检查此 Delete with join(multiple tables)

修改

如果子类别下没有任何项目,那么您需要将INNER JOIN替换为LEFT JOIN

DELETE C,SC,I
FROM categories C 
INNER JOIN sub_categories SC ON C.id = SC.category_id
LEFT JOIN items I ON SC.id = I.subcategory_id
WHERE C.id = 5;