在一个查询中,有没有办法一次删除三个表中的多个记录?
类别:
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
答案 0 :(得分:2)
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;