UPDATE users as u2 SET u2.`password` = SELECT u.password as pwd FROM homestead.users as u LEFT JOIN homestead.teachers as t on u.id = t.user_id WHERE t.staff_no = '2003001415' LIMIT 1) WHERE u2.`loginname` = 'admin' LIMIT 1
这样会报错,是mysql本身不支持操作本身又把本身作为数据源(一眼看上去特别有真理,但是看看语句逻辑,在别的数据库是先查出数据,再更新数据,不矛盾呀,也许是mysql查询的时候有点懒,没把查询的结果做一个隔离,而是映射什么的)
解决办法:(包一层就解决了)
UPDATE users as u2 SET u2.`password` =
(SELECT pwd from (
SELECT u.password as pwd FROM homestead.users as u LEFT JOIN homestead.teachers as t on u.id = t.user_id WHERE t.staff_no = '2003001415' LIMIT 1) as uu)
WHERE u2.`loginname` = 'admin' LIMIT 1

批判锋芒犀利,直指问题症结所在。