如何将sql查询出来的结果集对表进行更新

一、需求

数据库有a,b两张表,需要利用a表中的字段值去更新或填充b表中的字段值,其中a,b表中通常有相同的字段(比如外键)相关联。

二、方法(直接写sql,在数据库客户端进行操作)

1.内联视图更新:

update 
(select a.objectid,a.roadname,a.buildunit,a.region,b.organname,b.areacode from pipeproject a 
left join sys_organization b on a.buildunit=b.organname where a.buildunit is not null and a.region is null)
set region=areacode;

通常我们更新表数据的sql结构是:update 表名 set 列名 = 某个值 where 更新条件。在mybatis中,我们只需将查询到的结果集foreach一下即可将数据更新到数据库(在mapper.xml文件中,先查询,后更新)。

但是在数据库客户端直接操作用上述所示语法则可以达到相同的效果。此结构是:update 关联查询结果 set 要更新的列region = 作为替换数据的列areacode

其中region字段属于表a,areacode字段属于表b。此时所更新成功的表a的记录数为表a和表b进行关联查询结果的记录数,即此更新语句相当于是利用查询得到的结果对表a进行更新,因此尽管sql语句最后没有where子句,也不会对a表进行全表更新

2.子查询更新:

update pipeproject a 
set a.parentid = (select b.projectid from project b where a.roadname=b.projectname) 
where a.szplanid='95c112cd72274fbf9dd6d68b19e30023' 
and a.parentid is null and a.buildtype='1';

更新表a中 a.szplanid=‘95c112cd72274fbf9dd6d68b19e30023’ and a.parentid is null and a.buildtype=‘1’ 的数据 的 parentid 字段, parentid 的值从表b中取。

三、方法一不行可以尝试方法二

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQL Server中,可以使用不同的方法进行去重查询。其中一种方法是使用GROUP BY语句。GROUP BY语句根据一个或多个列对结果集进行分组,并且可以使用聚合函数如COUNT、SUM、AVG等来对分组后的数据进行计算。例如,可以使用以下语句对表中的重复数据进行删除,只保留一条记录: DELETE FROM 表名 WHERE ID NOT IN (SELECT MAX(ID) FROM 表名 GROUP BY 重复的字段) 另外,还可以使用DISTINCT关键字来对单列进行去重,只保留唯一的值。例如,可以使用以下语句对表中的name列进行去重并显示结果: SELECT DISTINCT name FROM 表名 如果要对多列进行去重,只需在SELECT语句中在开头加上DISTINCT关键字,而不需要在每个字段都加上。例如,可以使用以下语句对表中的id和name列进行去重并显示结果: SELECT DISTINCT id, name FROM 表名 此外,还可以结合COUNT函数使用DISTINCT关键字来对不同的name进行计数。例如,可以使用以下语句对表中的不同的name进行计数: SELECT COUNT(DISTINCT name) FROM 表名<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SQLService删除重复的数据](https://blog.csdn.net/superblade12/article/details/129603169)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值