• db2,oracle, Sql Server 批量更新语句


    -- aa(id,qty) ,bb(id,qty,loc_id(货架号))两个表.目的是把aa.qty=bb.qty
    db2 update aa set qty=(select qty from bb where bb.id=aa.id and bb.loc_id=9) where exists (select 1 from bb where bb.id=aa.id and bb.loc_id=9)

    -- 注:如果不加where exits这个条件,那么会把aa表中aa._id!=bb._id的那部分aa.qty数据给update成null.
    
    
     批量更新表时,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 t1SET (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 t1SET (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));

    转载:http://www.360doc.com/content/12/0321/17/8440196_196362933.shtml

  • 相关阅读:
    一个500人使用的后台服务站点优化过程
    关于一个每天请求50W次接口的设计实现过程
    Exception in thread "main" java.lang.NoSuchMethodError: scala.actors.AbstractActor.$init$(Lscala/actors/AbstractActor;)V
    搭建hadoop集群的免密钥登录配置
    Hive入门小结
    Jvm垃圾收集器和垃圾回收算法
    Java内存区域与对象创建过程
    得到直播,宁向东的清华管理学课。
    pandas中merge的使用
    少看别人写的文章,多看优秀的代码
  • 原文地址:https://www.cnblogs.com/xuebuhui/p/12457499.html
Copyright © 2020-2023  润新知