You can’t specify target table ‘a’ for update in FROM clause
这个错误你遇到过吗?
当我使用update语句更新数据表时遇到了这个错误,我的场景是将同一张表里的某行数据的某个字段,更新为和同一张表另外一行相应字段的同一值。
下面是解决过程。
一.要解决的问题
在MySQL中需要使用已经存在的一行数据的字段更新另外一行数据的字段。举个例子,假设有如下数据库表student_info:
student_info
id | name | school |
---|---|---|
1 | 小明 | 匡衡小学 |
2 | 小红 | 霍格沃兹魔法学院小学部 |
3 | 小华 | 李庄小学 |
现在需要将小明和小红的school改为和小华的一致,我们应该怎么写sql呢?
二.自然但错误的写法
UPDATE school_info
SET school = (
SELECT
school
FROM
school_info
WHERE
NAME = '小华'
)
WHERE
NAME IN ('小明', '小红')
这样写会报如下错误:
You can’t specify target table ‘a’ for update in FROM clause
所以这样写是不行的。MySQL并不支持这样的写法。
三.正确的写法
UPDATE school_info AS s1,
school_info AS s2
SET s1.school = s2.school
WHERE
s1. NAME IN ('小明', '小红')
AND s2. NAME = '小华'
这样就可以避免上述报错成功更新数据了。
另外,如果喜欢我的文章,可以扫码或直接搜索"Java面试锦囊"关注我的微信公众号。我会定期发布原创文章,期待你的到来