update expresspackage set IsUploadSto=-200 where BillCode in ( SELECT BillCode from expresspackage where RealLatticeNo not in (224,448) and `Status` = 0 and DownTime < '2022/1/26 15:29:03' and createTime < '2022/1/26 15:29:03' and IsUploadSto > -20 and IsUploadSto < 1 )
执行上诉语句出现You can't specify target table for update in FROM clause 不能在同一表中查询的数据作为同一表的更新数据。
改成下述语句就行
update expresspackage set IsUploadSto=-200 where BillCode in ( SELECT a.BillCode from ( SELECT BillCode from expresspackage where RealLatticeNo not in (224,448) and `Status` = 0 and DownTime < '2022/1/26 15:29:03' and createTime < '2022/1/26 15:29:03' and IsUploadSto > -20 and IsUploadSto < 1 ) a )
也就是说将select出的结果再通过中间表select一遍,这样就规避了错误。注意,这个问题只出现于mysql,mssql和Oracle不会出现此问题。