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

image

2,将同一张表中A列的值更新到B列

更新前表中的数据
image

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

image

posted @ 2021-08-09 22:11  kewen  阅读(1577)  评论(0编辑  收藏  举报