上述报错的语句,比如我执行如下MySQL,则报错:
UPDATE station c SET c.status=2 WHERE c.id IN (
SELECT
a.id
FROM
station a
LEFT JOIN station_application_record b ON a.station_num = b.station_num
WHERE
b.bill_num = 'GO1803150000431');
报错信息为:
[Err] 1093 - You can't specify target table 'c' for update in FROM clause
改进的方法一:(正确)
UPDATE station d SET d.status=1 WHERE d.id IN (
SELECT c.id FROM (
SELECT
a.id
FROM
station a
LEFT JOIN station_application_record b ON a.station_num = b.station_num
WHERE
b.bill_num = 'GO1803150000431') c);
通过额外的表,上述通过封装成表c临时表,来进行更新操作。
尝试用另一种写法:(
不成功
)
UPDATE (SELECT
a.*
FROM
station a
LEFT JOIN station_application_record b ON a.station_num = b.station_num
WHERE
b.bill_num = 'GO1803150000431') AS c SET c.status=2 ;
提示:[Err] 1288 - The target table c of the UPDATE is not updatable