Mysql 报错 You can‘t specify target table ‘表名‘ for update in FROM clause

Mysql 报错 You can’t specify target table ‘表名’ for update in FROM clause

执行mysql语句时,出现了You can’t specify target table ‘表名’ for update in FROM clause的错误。

该错误只有Mysql会出现,MSSQL和Oracle不会出现该错误。

sql是这样的:

UPDATE account set status=1 where id in ( select id from account where ISNULL(status));

查找表中status字段为空的,并把其更改为1。错误的意思是,不能先select出同一表中的某些值,再update这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值。

解决方案

使用中间表来规避错误,即先select的结果再使用中间表select一遍。
修改后sql如下:

UPDATE account set status=1 where id in ( 
select a.id from 
(select id from account where ISNULL(status)) a);
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值