Mysql-更新表时将该表查询出的数据作为更新条件-将某列的值更新为另外一列的值
1,更新表时将该表查询出的数据作为更新条件
在更新某张表时,如果更新的条件值是从该表中查询获得的时候,mysql会报错,如下
update smdm_item_0809
set enabled_flag = 1
where item_id in (select item_id
from smdm_item_0809
where enabled_flag != 1);
----------
> 1093 - You can't specify target table 'smdm_item_0809' for update in FROM clause
想要正常执行更新,则需要将条件中该表的查询作为一张临时表,再从该临时表中查询,如下:
update smdm_item_0809
set enabled_flag = 1
where item_id in (
select temp.item_id
from (select item_id from smdm_item_0809 where enabled_flag != 1) temp
);
----------
> Affected rows: 2
> 时间: 0.181s
2,将同一张表中A列的值更新到B列
更新前表中的数据
update smdm_item_0809 a,
smdm_item_0809 b
set a.item_number = b.item_code
where a.item_id = b.item_id
and a.item_id = 6101;
---------
> Affected rows: 1
> 时间: 0.155s