专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

SQL批量更新

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:38:33       共计:3635 浏览
首先两张表test1 test2 的表结构以及记录如下

SELECT * FROM test1

    1

这里写图片描述

SELECT * FROM test2

    1

这里写图片描述
两张表通过名字字段进行关联

SELECT * FROM test1 AS t1 LEFT JOIN test2 AS t2 ON t1.name = t2.name2

    1

这里写图片描述
现在需求如下:
将test2表中名字相同的分数更新到test1

UPDATE test1 AS t1 SET t1.score = (SELECT t2.score FROM test2 AS t2 WHERE t1.name = t2.name2)

    1

这种写法会存在一种问题:子查询中没有查询出的记录将被更新为null

SELECT * FROM test1

    1

这里写图片描述
可以看出name = 'pc' 的分数变成了null 因为在test2 中并没有关联记录
我们可以加上限制条件解决这个问题

UPDATE test1 AS t1 SET t1.score = (SELECT t2.score FROM test2 AS t2 WHERE t1.name = t2.name2) WHERE EXISTS (SELECT 1 FROM test2 AS t2 WHERE t1.name = t2.name2 )

    1

这样我们更新的表记录已经变为 关联的记录

SELECT * FROM test1

    1

这里写图片描述

这里我们再说一下另一种关联更新

UPDATE test1 AS t1 INNER JOIN test2 AS t2 ON t1.name = t2.name2 SET t1.score = t2.score

    1

即可达到要求,不需要后面的exists 从sql 可以看出 我们用的是inner join 也就是只有满足关联查询的才会被更新,如果使用leftjoin rightjoin 则要加过滤条件
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:sql在update更新时如何快速且大批量的更新数据 | ·下一条:C#实现百度站长平台-链接提交-主动推送的POST推送

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有