zoukankan      html  css  js  c++  java
  • 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));

  • 相关阅读:
    第五章:向量运算
    第四章:向量
    第三章:多坐标系
    近期一些学习的随笔
    2020高考游记
    寒假集训好题记录
    STL基本用法的一些记录
    2020暑假集训做题记录——数据结构
    2020.12.13~2020.12.20做题记录
    2020.11.30~2020.12.6 做题记录
  • 原文地址:https://www.cnblogs.com/badwood316/p/2079242.html
Copyright © 2011-2022 走看看