• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    在Oracle数据库中同时更新两张表的简单方法

    以前只会写一些简单的updaet语句,比如updae table set c1='XXX' 之类的

    今天遇到一个数据订正的问题,项目背景如下,有个表A,有两个字段a1,a2还有一个关联表B,其中也有两个字段,b1和b2。其中a2和b2是关联的,想把A中的字段a1更新成B中的b1

    理论上sql应该挺好写的,但是在oralce中实现了半天一直报语法错误。而且确实还有些小小细节没有注意到。

    首先上测试数据

    表1,ZZ_TEST1

    表2,ZZ_TEST2

    要把表一的text更新成表二的text1值,对应的sql如下:

    update ZZ_TEST1 t1 set t1."text" = (
     select T2."text1" from ZZ_TEST2 t2 where T2."pid"=t1."id"
    ) 
    WHERE EXISTS
    (
     SELECT 1 FROM ZZ_TEST2 t2 where T2."pid"=t1."id"
    )
    

    后面的where条件表示一个限制条件,只更新那些符合条件的数据,也可以写成

    update ZZ_TEST1 t1 set t1."text" = (
     select T2."text1" from ZZ_TEST2 t2 where T2."pid"=t1."id"
    )
    where t1."id" in (select "pid" from ZZ_TEST2 )
    
    

    另外还有一种merge的写法,对应的sql如下:

    merge into ZZ_TEST1 t1 using ZZ_TEST2 t2 on (t1."id" =t2."pid") 
     
    when matched then
     
    update set t1."text"=t2."text1"
    

    为了避免T2中有多条数据对应T1中的数据,可以把sql改成如下的方式:

    MERGE INTO ZZ_TEST1 t1 USING 
    ( 
    SELECT * FROM ZZ_TEST2 X WHERE X. ROWID = 
    (SELECT MAX(Y.ROWID) FROM ZZ_TEST2 Y WHERE X."id" = Y."id" )
     ) 
    t2 
    ON (t1."id" = t2."pid") 
    WHEN MATCHED THEN
    UPDATE SET t1."text" = t2."text1"
    

    还有一种update from 的语法,经过测试在oracle和mysql中不适用


    总结一下,项目中尝尝需要把一张表的字段更新到另一张表中的某一个字段。可以使用update语法,并要做好限定。会使用merge的语法,另外还有一种merge的语法也可以,update from 不能再oracle和mysql中使用。

    上一篇:Oracle数据库中ORDER BY排序和查询按IN条件的顺序输出
    下一篇:Oracle数据库按时间进行分组统计数据的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    在Oracle数据库中同时更新两张表的简单方法 在,Oracle,数据库,中,同时,