update关联其他表批量更新数据
为了做分析,需要整合一些数据到一个表中,涉及到通过主键关联多个表,获取其中的某些字段的值,通过update可以简单实现,找了一篇文章,挺不错:
批量更新表时,update一个表的列时,需要依赖另外的表,这种依赖可以是where条件子句,也可以要update的field的值依赖另外的表
通常有两种做法
1.使用存储过程
2.在程序代码里逐条循环执行
这里给出一种更高效、简洁的做法,批量更新SQL ,一句SQL就可以替代麻烦的循环过程,有MS SQLServer、Oracle、DB2下的写法
--关键点:t4和t1是同一个table,primary key肯定也是同一个,
--并以它进行关联,这样在 select语句里即可引用到要update的表的fields
UPDATE Table1 AS t1
SET (Field1,Field2) = (SELECT Field21, Field22
FROM Table2 t2
INNER JOIN Table3 t3
ON t3.Field31 = t2.Field23
INNER JOIN Table4 t4
ON t3.Field32 = t4.Filed41
WHERE t2.Field24 >= ''
AND t1.fId = t4.fId);
----------------------------MS SQLServer --------------------------------------
UPDATE t1
SET Field1 = Field21, Field2 = Field22
FROM Table2 t2
INNER JOIN Table3 t3
ON t3.Field31 = t2.Field23
INNER JOIN Table4 t4
ON t3.Field32 = t4.Filed41
WHERE ((t2.Field24 >= '')
AND t1.fId = t4.fId);
----------------------------Oracle --------------------------------------------
UPDATE Table1 t1
SET (Field1,Field2) = (SELECT Field21, Field22
FROM Table2 t2
INNER JOIN Table3 t3
ON t3.Field31 = t2.Field23
INNER JOIN Table4 t4
ON t3.Field32 = t4.Filed41
WHERE ((t2.Field24 >= '')
AND t1.fId = t4.fId))
WHERE EXISTS (SELECT Field21, Field22
FROM Table2 t2
INNER JOIN Table3 t3
ON t3.Field31 = t2.Field23
INNER JOIN Table4 t4
ON t3.Field32 = t4.Filed41
WHERE ((t2.Field24 >= '')
AND t1.fId = t4.fId));
---------------------------------DB2 ------------------------------------------
UPDATE Table1 AS t1
SET (Field1,Field2) = (SELECT Field21, Field22
FROM Table2 t2
INNER JOIN Table3 t3
ON t3.Field31 = t2.Field23
INNER JOIN Table4 t4
ON t3.Field32 = t4.Filed41
WHERE ((t2.Field24 >= '')
AND t1.fId = t4.fId))
WHERE EXISTS (SELECT Field21, Field22
FROM Table2 t2
INNER JOIN Table3 t3
ON t3.Field31 = t2.Field23
INNER JOIN Table4 t4
ON t3.Field32 = t4.Filed41
WHERE ((t2.Field24 >= '')
AND t1.fId = t4.fId));
转载于:https://www.cnblogs.com/badwood316/archive/2011/06/12/2079242.html
update关联其他表批量更新数据相关推荐
- update关联其他表批量更新数据-跨数据库-跨服务器Update时关联表条件更新
1.有时在做项目时会有些期初数据更新,从老系统更新到新系统.如果用程序循环从老系统付给新系统. 2.有时在项目中需要同步程序,或者自动同步程序时会有大量数据更新就可能用到如下方法了. 3.为了做分析, ...
- C# SqlDataAdapter.update结合事务(SqlTransaction)批量更新数据
//此处的程序功能主要是将一个库中的表数据(源表)更新到另外一个库中的表数据(目标表) //实现目标表的数据和源表数据一致,已包括增加,更新和删除数据记录功能 //主调用代码块 SqlConnecti ...
- php怎么更新多条数据,PHP中批量更新数据表中多条记录
class test { /** * 创建像这样的查询: "IN('a','b')"; * * @author wengxianhu * @created to 2013-05-2 ...
- oracle批量更新数据从另一表_全市场期货数据的批量下载和更新
不管是研究套利策略,还是多因子策略,都需要多品种的历史数据,所以下面介绍一下,如何调用vnpy的数据下载模块,来下载全市场的期货数据. 批量下载 1)设置合约品种 首先,我们要先生成一个字典,来指定需 ...
- mybatis批量更新数据三种方法效率对比
探讨批量更新数据三种写法的效率问题. 实现方式有三种, 1> 用for循环通过循环传过来的参数集合,循环出N条sql,需要在db链接url后面带一个参数 &allowMultiQuer ...
- FreeSql (十四)批量更新数据
FreeSql支持丰富的更新数据方法,支持单条或批量更新,在特定的数据库执行还可以返回更新后的记录值. var connstr = "Data Source=127.0.0.1;Port=3 ...
- tp5 批量更新多条记录_Thinkphp怎么批量更新数据
展开全部 ||thinkphp批量更新数据可以参考如下三种方法: 方法一: //批量修改 data二维数组 field关键字段62616964757a686964616fe59b9ee7ad94313 ...
- ASP批量更新数据代码
ASP批量更新数据代码 %> 两个文件 ..cn.asp 连接数据库用的 ..cn3.asp 执行文件 . cn.asp 源代码 <% dim conn dim dbpath bb=&qu ...
- Mybatis批量更新数据
Mybatis批量更新数据 第一种方式 [html] view plaincopy print? <update id="updateBatch" parameterType ...
最新文章
- Linux的Unicon资料
- LeetCode实战:设计循环双端队列
- firefox扩展开发(二):用XUL创建窗口控件
- (一) : iview-form 表单循环数组 - 验证规则
- axios vue 回调函数_vue中的ajax请求和axios包详解
- dubbo整合springmvc 使用 学习二(spring+dubbo+zookeeper单机服务)
- 【渝粤教育】电大中专Office办公软件_1作业 题库
- ansi-html Uncontrolled Resource Consumption in ansi-html报错解决
- 汇编语言TEST指令:对两个操作数进行逻辑(按位)与操作
- 分布式链路监控Zipkin + EKL + RabbitMQ
- HCIE笔记-汇聚层和接入层的基础知识
- vue中怎么把图片转换成base64字符串 , 以及base64字符串怎么转换成图片路径
- 在windows上安装Postgresql,安装空间数据库postgis引擎,创建可以存储空间点线面的数据库,解决could not open extension control file问题
- 什么是区块链,区块链又是什么?
- EasyUI easyui-datagrid分页功能实现
- nyoj451光棍节的快乐
- 一门正在消失的技艺——Vanilla JavaScript
- 被动式pocscan扫描神器搭建
- python蓝桥杯真题刷题打卡 | day7
- COO白眉:区块链的运营不是用户关系,而是同盟者!
热门文章
- You must define a PAYPAL_PAYFLOW_VENDOR_ID setting
- RuntimeError: Model class cmdb.models.UserInfo doesn't declare an explicit app_label
- 这是一份通俗易懂的知识图谱技术与应用指南(转)
- java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray
- 无限循环小数转化为分数形式
- fopen在linux中打开文件夹,plain C:用fopen()打开一个目录
- 法兰克机械手手动操作_五轴伺服机械手手动操作
- c语言extern关键字详解
- Servlet中过滤器的实现原理(源码实现)
- C#知识点总结系列:C# 数据结构