使用JOIN删除所有记录

时间:2011-08-20 15:44:51

标签: mysql sql

我有3张桌子:

带有列的

AAA

id  |  text

BBB 列(aaa_id)是上表中的外键=> id - AAA ):

id  |  text  | aaa_id

CCC 的列(bbb_id是上表中的外键=> id - BBB ):

id  |  text  | bbb_id

现在,当我从表格 AAA 中删除记录时,我想删除表格 BBB aaa_id = AAA.id的所有记录,并删除所有记录表 CCC 中的记录连接到我要从 BBB 中删除的记录(因此它们的bbb_id等于BBB.id aaa_id等于AAA.id)的记录。

我尝试过使用内连接,但我没有运气。同时,我用PHP选择所有记录并分别删除它们。

表格是MyISAM。

5 个答案:

答案 0 :(得分:3)

DELETE AAA, BBB, CCC
    FROM AAA
    LEFT JOIN BBB ON BBB.aaa_id = AAA.id
    LEFT JOIN CCC ON CCC.bbb_id = BBB.id

如果每个表中始终有子记录,您也可以使用INNER JOIN。或者,您可以在外键约束中设置ON DELETE CASCADE。

答案 1 :(得分:1)

您正在寻找ON DELETE CASCADE选项。

  

CASCADE:从父表中删除或更新行,并自动删除或更新子表中的匹配行。支持ON DELETE CASCADE和ON UPDATE CASCADE。在两个表之间,不要定义几个ON UPDATE CASCADE子句,这些子句作用于父表或子表中的同一列。

答案 2 :(得分:1)

如果要从另一个表中删除相关行,则必须使用支持外键的表引擎。

然后将ON DELETE操作设置为CASCADE

可在此处找到更多文档:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

答案 3 :(得分:1)

当您从父表中删除所有子行时,将使用on delete cascade创建外键

答案 4 :(得分:0)

外键约束为ON DELETE CASCADE

当你创建表时遵循以下示例的语法,

CREATE TABLE `table2` (
`id` int(11) NOT NULL auto_increment,
`name` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `ids` (`ids`)
CONSTRAINT `foreign` FOREIGN KEY (`ids`)
REFERENCES `table2` (`ids`) ON DELETE CASCADE ON UPDATE CASCADE
)

注意:你需要使用InnoDB存储引擎,他默认MyISAM存储引擎不支持外键关系。

否则使用内部联接进行删除