首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >mysql的多表删除

mysql的多表删除

作者头像
老高的技术博客
发布于 2022-12-27 15:52:02
发布于 2022-12-27 15:52:02
4.3K0
举报

mysql默认是禁用多表删除语句的,之前的做法都是先把条件缓存,然后逐条执行

代码语言:javascript
复制
delete from a where a.xxx in (123123,123123);
delete from b where b.xxxx in (123123,123123);

如果写成下面这种绝对是错误的!

代码语言:javascript
复制
delete * from a,b where xxxx in  ...

今天突然发现原来mysql也是可以一条sql删除多表数据的,下面来分析一下 多表删除其实思路还是比较简单的,首先条件就是多个表(一般就两个表,织梦的文章信息存在3个表里,删除起来很麻烦)有关联 其次,删除条件一般都是由关联的这一行组成的,也可能不是,没有关系,我们先写一个试试:

代码语言:javascript
复制
DELETE p.*, pp.* 
FROM pw_threads p, pw_tmsgs pp 
WHERE p.tid = pp.tid 
AND p.tid in(SELECT tid FROM pw_threads WHERE postdate>UNIX_TIMESTAMP('2014-06-12 00:00:00') and fid=136)

逻辑都通着,但是会报错

You can't specify target table 'A' for update in FROM clause 原因是: In general, you cannot modify a table and select from the same table in a subquery.

所以你需要把子查询改为临时表中,所以最终的查询就是

代码语言:javascript
复制
DELETE p.*, pp.* 
FROM pw_threads p, pw_tmsgs pp 
WHERE p.tid = pp.tid 
AND p.tid in(SELECT tmp.tid FROM (SELECT * FROM pw_threads) as tmp WHERE tmp.postdate>UNIX_TIMESTAMP('2014-06-12 00:00:00') and tmp.fid=136)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档