2012-05-19 32 views
1

基本上,我有三个表DELETE FROM不工作的多个表 - 无能与MySQL

工作场所与字段ID(其中我要删除相关联的数据的一个),并且识别参与者一个participantlist_id名单。

participantlist - 只是LIST_ID和名称

participantlist_links - 与LIST_ID和participant_id

,我试图使用查询是这样的:

DELETE FROM workplaces, 
participantlist, 
participantlist_links 
WHERE workplaces.id = '8' AND 
     workplaces.participantlist_id = participantlist_links.list_id AND 
     workplaces.participantlist_id = participantlist.list_id 

,但我得到:

MySQL说:

1064 - 你h在您的SQL语法中发生错误;检查对应于您的MySQL服务器版本的手册,以便在第3行的WHERE workplaces.id ='8'和workplaces.participantlist_id = participant'处使用正确的语法。

任何想法?

SOLUTION:

DELETE t1, t2, t3 
    FROM workplaces AS t1 
    LEFT JOIN participantlist AS t2 ON t1.participantlist_id = t2.list_id 
    LEFT JOIN participantlist_links AS t3 ON t2.list_id = t3.list_id 
    WHERE t1.id = '8' 
+0

是否要删除相关的行形式的所有3个表?或者仅从1张桌子?还是从2开始? –

回答

2

你有没有考虑把ON DELETE CASCADE的外键? 这种方式从工作区中删除行时,其他行也会自动删除。

请参阅此链接了解更多信息: http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

否则你就必须使用单独的DELETE FROM查询,将它们全部删除。

在执行这些删除操作时使用事务处理很明智。所以,如果有什么差错,你可以回滚所做的更改:

BEGIN TRANSACTION; 
DELETE FROM ......; 
DELETE FROM ......; 
COMMIT; 
+0

我使用myisam ... –

1

尝试

DELETE workplaces, participantlist, participantlist_links FROM workplaces, 
participantlist, 
participantlist_links 
WHERE workplaces.id = '8' AND 
     workplaces.participantlist_id = participantlist_links.list_id AND 
     workplaces.participantlist_id = participantlist.list_id 
1

正如the manual提到的,DELETE的多表的形式有不同的语法,你正在使用的。你想:

DELETE workplaces, participantlist, participant_links 
FROM workplaces 
    JOIN participantlist 
    ON workplaces.participantlist_id = participantlist.list_id 
    JOIN participantlist_links 
    ON workplaces.participantlist_id = participantlist_links.list_id 
WHERE workplaces.id = '8'