我想根据一些id对某张表进行更新,首先先筛选出数据(以下操作只涉及一张表):
SELECT id FROM `workflow_instance` WHERE create_time < '2022-03-30 00:00:00' and `status`='1'
之后我要对这些id进行更新:
UPDATE `workflow_instance` SET `status`=3 WHERE id IN (SELECT id FROM `workflow_instance` WHERE create_time < '2022-03-30 00:00:00' and `status`='1')
然后报了这个错误:
You can't specify target table 'workflow_instance' for update in FROM clause
解决方法:
添加一张中间表
即先查询:
SELECT a.* FROM (SELECT id FROM `workflow_instance` WHERE create_time < '2022-03-30 00:00:00' AND `status`='1') a
再使用上面查询的中间表更新:
UPDATE `workflow_instance` SET `status`=3 WHERE id IN (SELECT a.* FROM (SELECT id FROM `workflow_instance` WHERE create_time < '2022-03-30 00:00:00' AND `status`='1') a)