DELETE f.* FROM FILE f, topic t, course c WHERE f.topic_id = t.topic_id AND t.course_id = 28;
DELETE t.* FROM topic t WHERE t.course_id = 28;
DELETE c.* FROM course c WHERE c.course_id = 28;
编辑:op想知道(如澄清问题的评论所示),他想删除所有三个表中共享id的行…实际上是跨三个表的级联删除。
DELETE f.*, t.*, c.* FROM file f
JOIN topic t ON t.topic_id = f.topic_id
JOIN course c ON c.course_id = f.topic_id
WHERE f.topic_id = 28
这对应于MySQL文档中的多表语法。它说:
对于多表语法,DELETE从每个tbl_name中删除满足条件的行。
您可以这样做的另一种方式是将列声明为父表的外键(我不确定表中的父/子关系是什么),并对外键使用ON DELETE CASCADE
选项。然后,您只需从父表中删除该行,相关行将自动从子表中删除。注意,外键强制要求使用InnoDB
而不是MyISAM
作为数据库引擎。