MySQL之多表关联删除/更新

日常测试的时候,需要连接其他表而删除某些脏数据,按照正常的查询的写法,会这样写删除语句:

DELETE from `order` 
where id in (SELECT o.id from `order` o LEFT JOIN customer c on o.customer_id =c.id where o.customer_id is not null and c.id is null);

然后… You can’t specify target table ‘order’ for update in FROM clause
在这里插入图片描述
意思是:不能先select出同一表中的某些值,再update这个表,即不能依据某字段值做判断再来更新某字段的值。

好吧~~~

百度研究一番这么解决这个多表连接删除的问题。
这里也疑惑了下,多表关联的更新表的写法为啥看书、看视频的时候都不见介绍???

-- 删除order表的数据,注意:通过别名删除
DELETE o 
FROM `order` o
	LEFT JOIN customer c ON o.customer_id = c.id 
WHERE o.customer_id IS NOT NULL AND c.id IS NULL

-- 删除customer表数据,注意:通过别名删除
DELETE c 
FROM `order` o
	LEFT JOIN customer c ON o.customer_id = c.id 
WHERE o.customer_id IS NOT NULL AND c.id IS NULL

-- 同时删除order、customer表数据,注意:通过别名删除
DELETE o,c 
FROM `order` o
	LEFT JOIN customer c ON o.customer_id = c.id 
WHERE o.customer_id IS NOT NULL AND c.id IS NULL

顺便也研究了下多表连接时怎么更新:

UPDATE wx_customer wc
LEFT JOIN `order` o ON wc.id = o.wx_customer_id 
SET o.wx_customer_id = NULL, wc.customer_id = NULL,wc.relate_wx_id = NULL 
WHERE	wc.id = "937680";

这里提一嘴:多表连接的更新,可以同时更新两个表 ~

百度学习的时候,也有些大佬使用别名。。。。这个写法日自己不怎么使用,这里就不贴上来了

总结规矩(不然有点不好记~):

不管是SELECT、DELETE 还是 UPDATE语句,都是在表这里进行多表关联操作。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值