我正在尝试使用SQL从连接在一起的多个表中删除多行。
表A连接到表B表B连接到表C
我想删除表B和C中与表A中的一行相对应的所有行
CREATE TABLE `boards` ( `boardid` int(2) NOT NULL AUTO_INCREMENT, `boardname` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`boardid`) ); -- -------------------------------------------------------- -- -- Table structure for table `messages` -- CREATE TABLE `messages` ( `messageid` int(6) NOT NULL AUTO_INCREMENT, `boardid` int(2) NOT NULL DEFAULT '0', `topicid` int(4) NOT NULL DEFAULT '0', `message` text NOT NULL, `author` varchar(255) NOT NULL DEFAULT '', `date` datetime DEFAULT NULL, PRIMARY KEY (`messageid`) ); -- -------------------------------------------------------- -- -- Table structure for table `topics` -- CREATE TABLE `topics` ( `topicid` int(4) NOT NULL AUTO_INCREMENT, `boardid` int(2) NOT NULL DEFAULT '0', `topicname` varchar(255) NOT NULL DEFAULT '', `author` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`topicid`) );
好吧,如果您使用过InnoDB表,则可以使用外键设置级联删除,这将自动完成所有操作。但是,如果您出于某种原因使用MyISAM,则只需使用多表DELETE即可:
DELETE FROM boards, topics, messages USING boards INNER JOIN topics INNER JOIN messages WHERE boards.boardid = $boardid AND topics.boardid = boards.boardid AND messages.boardid = boards.boardid;