繁体   English   中英

删除不适用于多个表-与MySQL无能为力

[英]DELETE FROM not working for multiple tables - clueless with mysql

基本上我有三张桌子

具有字段ID(我要删除其中的相关数据之一)和标识参与者列表的partnerlist_id的工作场所。

参与者列表-仅list_id和名称

参与者列表链接-具有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-您的SQL语法有误; 检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第3行的“ WHERE workshops.id ='8'AND workshops.participantlist_id =参与者”附近使用

有任何想法吗?

解:

    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'

您是否考虑过在外键上放置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;

尝试

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

手册所述 ,多表形式的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'

您可以使用JOIN这样从多个表中删除:

DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

http://dev.mysql.com/doc/refman/5.5/en/delete.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM