[英]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说:
有任何想法吗?
解:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.