为了做分析,需要整合一些数据到一个表中,涉及到通过主键关联多个表,获取其中的某些字段的值,通过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关联其他表批量更新数据相关推荐

  1. update关联其他表批量更新数据-跨数据库-跨服务器Update时关联表条件更新

    1.有时在做项目时会有些期初数据更新,从老系统更新到新系统.如果用程序循环从老系统付给新系统. 2.有时在项目中需要同步程序,或者自动同步程序时会有大量数据更新就可能用到如下方法了. 3.为了做分析, ...

  2. C# SqlDataAdapter.update结合事务(SqlTransaction)批量更新数据

    //此处的程序功能主要是将一个库中的表数据(源表)更新到另外一个库中的表数据(目标表) //实现目标表的数据和源表数据一致,已包括增加,更新和删除数据记录功能 //主调用代码块 SqlConnecti ...

  3. php怎么更新多条数据,PHP中批量更新数据表中多条记录

    class test { /** * 创建像这样的查询: "IN('a','b')"; * * @author wengxianhu * @created to 2013-05-2 ...

  4. oracle批量更新数据从另一表_全市场期货数据的批量下载和更新

    不管是研究套利策略,还是多因子策略,都需要多品种的历史数据,所以下面介绍一下,如何调用vnpy的数据下载模块,来下载全市场的期货数据. 批量下载 1)设置合约品种 首先,我们要先生成一个字典,来指定需 ...

  5. mybatis批量更新数据三种方法效率对比

    探讨批量更新数据三种写法的效率问题. 实现方式有三种, 1> 用for循环通过循环传过来的参数集合,循环出N条sql,需要在db链接url后面带一个参数  &allowMultiQuer ...

  6. FreeSql (十四)批量更新数据

    FreeSql支持丰富的更新数据方法,支持单条或批量更新,在特定的数据库执行还可以返回更新后的记录值. var connstr = "Data Source=127.0.0.1;Port=3 ...

  7. tp5 批量更新多条记录_Thinkphp怎么批量更新数据

    展开全部 ||thinkphp批量更新数据可以参考如下三种方法: 方法一: //批量修改 data二维数组 field关键字段62616964757a686964616fe59b9ee7ad94313 ...

  8. ASP批量更新数据代码

    ASP批量更新数据代码 %> 两个文件 ..cn.asp 连接数据库用的 ..cn3.asp 执行文件 . cn.asp 源代码 <% dim conn dim dbpath bb=&qu ...

  9. Mybatis批量更新数据

    Mybatis批量更新数据 第一种方式 [html] view plaincopy print? <update id="updateBatch" parameterType ...

最新文章

  1. Linux的Unicon资料
  2. LeetCode实战:设计循环双端队列
  3. firefox扩展开发(二):用XUL创建窗口控件
  4. (一) : iview-form 表单循环数组 - 验证规则
  5. axios vue 回调函数_vue中的ajax请求和axios包详解
  6. dubbo整合springmvc 使用 学习二(spring+dubbo+zookeeper单机服务)
  7. 【渝粤教育】电大中专Office办公软件_1作业 题库
  8. ansi-html Uncontrolled Resource Consumption in ansi-html报错解决
  9. 汇编语言TEST指令:对两个操作数进行逻辑(按位)与操作
  10. 分布式链路监控Zipkin + EKL + RabbitMQ
  11. HCIE笔记-汇聚层和接入层的基础知识
  12. vue中怎么把图片转换成base64字符串 , 以及base64字符串怎么转换成图片路径
  13. 在windows上安装Postgresql,安装空间数据库postgis引擎,创建可以存储空间点线面的数据库,解决could not open extension control file问题
  14. 什么是区块链,区块链又是什么?
  15. EasyUI easyui-datagrid分页功能实现
  16. nyoj451光棍节的快乐
  17. 一门正在消失的技艺——Vanilla JavaScript
  18. 被动式pocscan扫描神器搭建
  19. python蓝桥杯真题刷题打卡 | day7
  20. COO白眉:区块链的运营不是用户关系,而是同盟者!

热门文章

  1. You must define a PAYPAL_PAYFLOW_VENDOR_ID setting
  2. RuntimeError: Model class cmdb.models.UserInfo doesn't declare an explicit app_label
  3. 这是一份通俗易懂的知识图谱技术与应用指南(转)
  4. java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray
  5. 无限循环小数转化为分数形式
  6. fopen在linux中打开文件夹,plain C:用fopen()打开一个目录
  7. 法兰克机械手手动操作_五轴伺服机械手手动操作
  8. c语言extern关键字详解
  9. Servlet中过滤器的实现原理(源码实现)
  10. C#知识点总结系列:C# 数据结构