mysql update使用子查询

今天我像以前操作Oracle写了一个update sql:

update device_user a set a.scene_id=null 
where a.id not in(select min(t.id) from device_user t group by t.device_id);

根据子查询的结果,更新表中的一个字段。

在mysql数据库中执行后报错:

Error Code: 1093. You can't specify target table 'a' for update in FROM clause

一直没弄明白这个错误,然后经过多次度娘后,发现mysql update时,更新的表不能在set和where中用于子查询。

修改上面的sql为mysql数据库支持的方式:

update device_user du, 
(select id from device_user where id not in(select min(t.id) from device_user t group by t.device_id)) b 
set du.scene_id=null 
where du.id=b.id;
上一篇:还在写RAM policy授权脚本?试试通过Bucket Policy一键配置细颗粒度访问权限


下一篇:阿里云新品发布会周刊第47期 丨 加入阿里技术团队三年,哪些习惯让我在工作上持续受益?