批量更新的sql语句写法

原创 2011年01月15日 13:52:00

--Table1字段:fId,Field1,Field2
--Table2字段:fId,Field21,Field22
UPDATE Table1  
SET Field1 = Field21, Field2 = Field22  
FROM Table2 t2  WHERE Table1.fId = t2.fId);

 

批量更新表时,update一个表的列时,需要依赖另外的表,这种依赖可以是where条件子句,也可以要update的field的值依赖另外的表  
   通常有两种做法  
   1.使用存储过程  
   2.在程序代码里逐条循环执行  
这里给出一种更高效、简洁的做法,批量更新SQL ,一句SQL就可以替代麻烦的循环过程,有MS SQLServer、Oracle、DB2下的写法  
--关键点:t4和t1是同一个table,primary key肯定也是同一个,  
--并以它进行关联,这样在 select语句里即可引用到要update的表的fields  
----------------------------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 update select语句)

QL update select语句   最常用的update语法是: UPDATE SET = , SET =   www.2cto.com   如果我的更新值Value是从一条...

SQL语句教程 写法大全

  • 2013-10-25 10:50
  • 1.34MB
  • 下载

mybatis常见问题处理:批量操作,传递多个参数,like语句写法等等

mybatis常见问题处理:批量操作,传递多个参数,like语句写法等等

高级SQL语句写法

  • 2015-03-13 13:16
  • 90KB
  • 下载

mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法

有时候,我们需要复制某个字段一整列的数据到另外一个新的字段中,或是需要把某个表的某个字段的值跨表复制到另一个表中的某个字段,本文就罗列了一些SQL语句写法,需要的朋友可以参考下
  • baokx
  • baokx
  • 2014-07-01 15:32
  • 2076

SQL循环语句 的写法

SQL循环语句 declare @i int set @i=1 while @i<30 begin insert into test (userid) values(@i) set @i=@i+1 e...

关于oracle中PL/SQL语句,即存储过程的写法和调用。

1.什么是PL/SQL,有什么作用   --Procedure Language/SQL 过程语言+SQL   --PL/SQL是Oracle数据库内部存储和运行     一段程序   --P...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)