在select外边套一层,让数据库认为你不是查同一表的数据作为同一表的更新数据:
update user_basic set is_new=1 where id IN(
SELECT a.id FROM (
SELECT user_basic.id FROM user_basic,staff,(
SELECT * FROM plt_copy WHERE id IN (
SELECT MAX( plt_copy.ID ) AS ID FROM plt_copy
JOIN user_basic ON user_basic.id = plt_copy.USER_ID
JOIN staff ON staff.work_num = plt_copy.EMPCODE
WHERE CALL_RESULT = 1 GROUP BY USER_ID
)
) AS plt_copy
WHERE
user_basic.staff_id = staff.id
AND plt_copy.EMPCODE = staff.work_num
AND plt_copy.USER_ID = user_basic.id
AND user_basic.staff_id IS NOT NULL
AND
CASE
WHEN ( user_basic.allot_time - 300 ) > UNIX_TIMESTAMP( plt_copy.CALL_TIME ) THEN
TRUE ELSE FALSE
END
GROUP BY
USER_ID
) AS a
);