MySQL You can’t specify target table 'progress' for update in FROM clause

错误 sql

UPDATE alarm_progress SET operator = '1' WHERE id IN
( SELECT id FROM alarm_progress WHERE operator = '系统' )

错误原因

[Err] 1093 - You can't specify target table 'progress' for update in FROM clause

不能在同一个 sql 语句中,先 select 同一个表的某些值,然后再 update 这个表。

解决方案

将查询出来的值放入临时表中,再查询一次。

UPDATE alarm_progress SET operator = '1' WHERE id IN
( SELECT * FROM
    ( SELECT id FROM alarm_progress WHERE operator = '系统' ) t1
)

回顾 2024.7.31

这是我写的 SQL?为什么会这么写啊?难道不应该是下面这个:

UPDATE alarm_progress SET operator = '1' WHERE operator = '系统'