订单表有个字段仓库id,拣货单之前没有仓库id。由于业务的需求,需要拣货单增加仓库字段。
订单表和拣货单的关系表:wms_relation。
为了修复老数据,需要一个脚本订正,把订单表的仓库 更新到拣货单仓库字段。
想想很简单吧。。
写了一个sql语句:
update picking_main p
set p.warehouse_id=(select som.warehouse_id
from picking_main pm
left join wms_relation wr on wr.two_id = pm.id
right join send_order_main som on wr.one_id=som.id
where pm.id=p.id);
结果一执行,报错:
> 1093 - You can't specify target table 'p' for update in FROM clause
从网上找到原因:
mysql不允许update目标表和子查询里面的表为同一张表
解决办法: 利用子查询sql可以改变双层的子查询,即可执行成功 (但性能较差,仅仅适合较小的数据量的)。
于是改成下面的sql:
update picking_main p
set p.gmt_modified=now(),
p.warehouse_id = (select temp.warehouse_id from (select som.warehouse_id ,pm.id
from picking_main pm
left join wms_relation wr on wr.two_id = p