[1053]mysql 1093 - You can‘t specify target table ‘a‘ for update in FROM clause

报错意思是:不能在from子句中指定要更新的目标表 a

如:
customer 银行客户信息表

bankInfo 银行账户

修改张三的银行卡密码为123456:

update bankInfo as a set `password`=123456 
where a.idCard=(select b.idCard from bankInfo as b where NameId=
(select NameId from customer where `Name`='张三')); # 不能在from子句中指定要更新的目标表

执行上面SQL语句时出现这个错误,是因为

在更新这个表和数据的同时又去查询这个表数据,而查询的数据又做更新的条件,就产生了矛盾。

应这样解决:
把要更新的数据表符合要求(的几列)数据查询出来,做为一个第三方表(临时表),然后从中筛选更新。

UPDATE bankInfo AS a SET `password`=123456
WHERE a.idCard=(SELECT b.idCard FROM
(SELECT * FROM bankInfo WHERE NameId=(SELECT NameId from customer WHERE `Name`='张三')) AS b);

这样就可以进行表数据更新啦~

来源:https://blog.csdn.net/qq_51444577/article/details/117774420

Guess you like

Origin blog.csdn.net/xc_zhou/article/details/120709574