报错意思是:不能在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