表A
UserID | UserName |
1 | a |
2 | b |
3 | c |
4 | d |
UserID | UserName | UserPassWord |
1 | 111 | |
2 | 111 |
把表A中的UserName更新到表B中,执行以下SQL
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
该语句用直观理解比较难懂。如果拆分以下两步,则思路就清晰了。
第一步,筛选合并表
以被更新的表B为主,根据查询条件生成新表C
查询条件:A.UserID=B.UserID
表C
UserID | B.UserName | B.UserName | A.UserPassWord |
1 | a | 111 | |
2 | b | 111 |
第二步,根据表C和set表达式,循环更新字段
相当于
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
任何Update语句都可以拆分成这两个步骤。