里给出一种更高效、简洁的做法,批量更新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));

高效批量更新 sql 字段的值(从一个表向另一个表更新)的更多相关文章

  1. sql 批量更新某个字段的值

    UPDATE Tabel1 t1 set t1.col1= ( SELECT col2 from Tabel2 t2 WHERE t1.col1=t2.col2) where exists ( SEL ...

  2. MySQL 如何更新某个字段的值为原来的值加1

    格式:update 表名称 set 字段名称 = 字段名称 + 1 [ where语句] 比如说数据库中有一张student表,要想把id为1的学生成绩(score)加1则update student ...

  3. sql 字段重复值,in,like

  4. mysql变成类型字段varchar值更新变长或变短底层文件存储原理

    为了搞清楚MySQL对于可变长度字段值修改时,如何高效操作数据文件的机制.之前一直模糊不清,网上也搜不到现成的答案.经过多方资料搜集整理.写出此文供大家一起参阅.由于涉及众多非常底层的知识,我假设读者 ...

  5. 即使用ADO.NET,也要轻量级动态生成更新SQL,比Ormlite性能更高

    先上测试结果: //测试1000次针对同一个表同一个字段更新,比Ormlite平均快2.34倍 //生成SQL+ExecuteNonQuery Ormlite 倍数 //6513ms 15158ms ...

  6. Hibernate 更新部分字段的实现

    在Hibernate 中,有时我们只需要更新部分字段,此时如果使用update()方法,会将所有字段都更新,对于没有set的字段,就会设置成NULL,如果这些字段里面有非空的字段就会报错. 解决的方法 ...

  7. EF更新指定字段.或个更新整个实体

    EF更新指定字段.或个更新整个实体 更新整个实体: public bool Update(Company compay) { if (compay != null) { dbContext.Entry ...

  8. 利用osql/ocmd批处理批量执行sql文件

    原文:利用osql/ocmd批处理批量执行sql文件 上周在测试环境建了几十张表,保存了.sql文件,准备在正式环境重建的时候懒得一个个打开建了,做一在网上搜寻了一下,果然有简单点的方法. 利用osq ...

  9. 解决sql语句中参数为空(null)不会更新参数的问题

    用的mybatis自动生成的 情景: 修改页面中,修改某个字段,修改前有数据,修改后为空. mybatis中一般用到 如:(这种直接忽略为空的字段,不能更新空字段参数) <update id=& ...

随机推荐

  1. NFinal学习笔记 02—NFinalBuild

    在学习NFinal的过程中发现在线.net编译器Web版—— NFinalBuild 什么是NFinalBuild呢?它就是帮助我们简单又快速的更新我们网站的一种编译器,我们不用再只为了更新.net网 ...

  2. td 单元格 内容自动换行

    <table width="100%" border="1" align="center"> <tr> <td ...

  3. MagicalRecord(简化CoreData操作)

    1.新建项目不勾选coredata 2.pod 'MagicalRecord' 3.新建模型文件 4.添加实体和属性 5.Create NSManagedObject subclass 6.增 Per ...

  4. 编译错误“The run destination My Mac 64-bit is not valid for Running the scheme '***',解决办法

    1. iOS APP Project or  Mac APP Project编译错误提示:
“The run destination My Mac 64-bit is not valid for Ru ...

  5. c#程序为PDF文件填写表单内容

    众所周知,PDF文件一般情况下是无法修改的,如果你有一张现成的PDF表格,这时想通过编程实现从数据库或者动态生成内容去填写这张表格,就会有些问题了,首先我们要解决以下2个重要的问题: 1.如何将内容写 ...

  6. 不到30行JS代码实现的Excel表格

    不到30行JS代码实现的Excel表格,jQuery并非不可替代 某国外程序员展示了一个由原生JS写成不依赖第三方库的,Excel表格应用,有以下特性: 由不足30行的原生JavaScript代码实现 ...

  7. php web qq第三方登录

    官方api地址:http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-01.去qq互联上注册申请成为开发者,并创 ...

  8. python的时间模块

    python有两个重要的时间模块,分别是time和datetime 先看time模块 表示时间的几种方法: 1)时间元组:time.struct_time(tm_year=2016,   tm_mon ...

  9. nginx+mysql+php

    根据生产环境安装操作系统(centos 6.0 64位系统),安装完成后,使用Xshell通过ssh协议连接服务器.ssh 用户名@IP+回车+输入密码后登录系统.#mkdir -p /home/to ...

  10. Taurus.MVC

    开源:Taurus.MVC 框架 为什么要创造Taurus.MVC: 记得被上一家公司忽悠去负责公司电商平台的时候,情况是这样的: 项目原版是外包给第三方的,使用:WebForm+NHibernate ...