[Err] 1093 - You can't specify target table 'a' for update in FROM clause (MYSQL报错)

前几天需要对数据库表做一个略微复杂的更新操作,当时写的语句大概是这样:

update archives a, sys_user s 
set s.username = a.stu_name 
where s.id = a.id and a.phone IN (select a.phone
				    from archives a, sys_user s
				    where a.phone = s.mobile
				    GROUP BY a.phone
				    HAVING COUNT(*) > 1) 

需要利用一个表的数据更新另一个表的数据,但是同时更新的条件又是通过这两个表做联结查询得到的

逻辑是没有问题的

但是报错了:

[Err] 1093 - You can't specify target table 'a' for update in FROM clause

大概就是不能用某表的查询结果作为条件更新数据

网上资料说只有MySQL会出现这种问题

解决的方法也很简单

update archives a, sys_user s 
set s.username = a.stu_name 
where s.id = a.id and a.phone IN (select * from (select a.phone
						from archives a, sys_user s
						where a.phone = s.mobile
						GROUP BY a.phone
						HAVING COUNT(*) > 1) k) 

将查询结果重命名为一张表,然后再次select的结果就可以作为update的where条件了。

当然可能这个报错的原因不止这一种,后续如果有这个问题我会持续记录到这个文章中。

 


 

如有错误,欢迎指摘。也欢迎通过左上角的“向TA提问”按钮问我问题,我将竭力解答你的疑惑。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值