更新数据为同一张表查询结果

mysql语言 2018-08-16

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

本文由 wenyi 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

只有地板了

  1. qsbmkwnizt
    qsbmkwnizt

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

取消回复

添加新评论