精华内容
下载资源
问答
  • SQL update left join查询

    千次阅读 2020-08-01 20:12:41
    对于有的更新语句,要更新的表可能条件不够,需要用到left join关联其他表, 但是不能直接关联,否则报错:错误如下: update imim_gireqbillitems gi left join imim_gireqbills g on g.guid=gi.guid set gi....

    原文链接:https://blog.csdn.net/WuLex/article/details/84139590

    对于有的更新语句,要更新的表可能条件不够,需要用到left join关联其他表,

    但是不能直接关联,否则报错:错误如下:

    update  imim_gireqbillitems gi 
    left join imim_gireqbills g on g.guid=gi.guid
    set gi.quantity=
    (
        select sum(gi2.quantity)
        from imim_gireqbillitems gi2
        left join imim_gireqbills g2 on g2.guid=gi2.guid
        where g2.ismerge='0' and g2.mergeid=g.mergeid
    )
    where g.ismerge='1' and exists
    (
        select 1
        from imim_gireqbillitems gi2
        left join imim_gireqbills g2 on g2.guid=gi2.guid
        where g2.ismerge='0' and g2.mergeid=g.mergeid
    )
    

    正确实例:

    update 
    (
      select * from imim_gireqbillitems gi 
      left join imim_gireqbills g on g.guid=gi.guid
      where g.ismerge='1'
    ) T
    set T.quantity=
    (
        select sum(gi2.quantity)
        from imim_gireqbillitems gi2
        left join imim_gireqbills g2 on g2.guid=gi2.guid
        where g2.ismerge='0' and g2.mergeid=T.mergeid
    )
    where exists
    (
        select 1
        from imim_gireqbillitems gi2
        left join imim_gireqbills g2 on g2.guid=gi2.guid
        where g2.ismerge='0' and g2.mergeid=T.mergeid
    )
    
    
    

    Oracle中的 UPDATE FROM 解决方法

    在表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。像sql server提供了update的from子句,可以将要更新的表与其它的数据源连接起来。虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就可以在update的表达式中引用要更新的表以外的其它数据。
    例如:

    UPDATE Table2
    SET Table2.ColB = Table2.ColB + Table1.ColB
    FROM Table2 
    INNER JOIN Table1 
    ON (Table2.ColA = Table1.ColA);
    
    

    实际更新的操作是在要更新的表上进行的,而不是在from子句所形成的新的结果集上进行的。

    Oracle没有update from语法,可以通过两种写法实现同样的功能:

    1:子查询UPDATE A SET A.NAME=(SELECT B.NAME FROM B WHERE B.ID=A.ID),本查询要根据具体情况看看是否变通成如下

    (1)单列

    UPDATE A
    SET A.NAME=(SELECT B.NAME FROM B WHERE B.ID=A.ID)
    WHERE A.ID IN (SELECT ID FROM B)

    (2)多列

    UPDATE order_rollup
    SET(qty,price)=(SELECT SUM(qty),SUM(price) FROM order_lines WHERE customer_id='KOHL' )
    WHERE cust_id='KOHL' AND order_period=TO_DATE('01-Oct-2000')
    

    2:利用视图来做

    UPDATE (SELECT A.NAME ANAME,B.NAME BNAME FROM A,B WHERE A.ID=B.ID)
    SET ANAME=BNAME;
    

    例如:

    UPDATE tablea a
    SET a.fieldforupdate = (SELECT b.fieldsource FROM tableb b WHERE a.keyfield = b.keyfield)
    WHERE EXISTS (SELECT b.fieldsource FROM tableb b WHERE a.keyfield = b.keyfield)
    

    有三点需要注意:

    对于一个给定的a.keyfield的值,SELECT b.fieldsource FROM tableb b WHERE a.keyfield = b.keyfield 的值只能是一个唯一值,不能是多值。
    在绝大多数情况下,最后面的where EXISTS子句是重要的,否则将得到错误的结果。
    对于视图更新的限制:
    如果视图基于多个表的连接,那么用户更新(update)视图记录的能力将受到限制。除非update只涉及一个表且视图列中包含了被更新的表的整个主键,否则不能更新视图的基表。

    展开全文
  • LEFT JOIN ( SELECT enterprise_id, device_group_id,device_id FROM bx_well_device_group WHERE del_flag = '0' ) dg ON dg.device_group_id = dgd.device_group_id SET dgd.del_flag = '1' WHERE dgd.device_id ...
    UPDATE bx_well_device_group_device dgd
    LEFT JOIN ( SELECT enterprise_id, device_group_id,device_id FROM bx_well_device_group WHERE del_flag = '0' ) dg ON dg.device_group_id = dgd.device_group_id 
    SET dgd.del_flag = '1' 
    WHERE
        dgd.device_id IN ( '1413326122770513921' ) 
        AND dgd.enterprise_id IN ( '1412600293963206658' ) 
        AND dgd.del_flag = '0';

    展开全文
  • 根据业务需求,需要从其他表的条件来更新...select t.id,t.shbj,r.shbj as shbj1 from mj_ry_sg t left join mj_ry r on t.zgh=r.zgh where t.yxbj='1' and r.yxbj='1' and r.shbj is not null ) loop update mj_ry_sg

    根据业务需求,需要从其他表的条件来更新本表的某一字段数据,以下是我的解决方案,可能是网上的其它方式有所不同。

    oracle中直接执行的语句如下:

    begin for fn in(
    select t.id,t.shbj,r.shbj as shbj1 from mj_ry_sg t left join mj_ry r on t.zgh=r.zgh where t.yxbj='1' and r.yxbj='1' and r.shbj is not null
    )
    loop
      update mj_ry_sg t set t.shbj=fn.shbj1 where t.id = fn.id;
    end loop;
    end;

    从查询语句中关联查询出id,将要更新的字段,覆盖值的字段,然后循环更新就可以了。

    这样的方式由于在数据库中执行所以速度还可以。

    当然,在代码中传入这个语句也是可以顺利执行的,以Java版本为例:

            String sql = "begin for fn in("
                    + "select t.id,t.shbj,r.shbj as shbj1 from mj_ry_sg t left join mj_ry r on t.zgh=r.zgh where t.yxbj='1' and r.yxbj='1' and r.shbj is not null "
                    + ") loop  update mj_ry_sg t set t.shbj=fn.shbj1 where t.id = fn.id;  end loop; end;";
            Db.update(sql);

    经测试,可以正常执行。

    展开全文
  • oracle update left join查询

    千次阅读 2018-11-16 23:23:23
    对于有的更新语句,要更新的表可能条件不够,需要用到left join关联其他表, 但是不能直接关联,否则报错:错误如下: update imim_gireqbillitems gi left join imim_gireqbills g on g.guid=gi.guid set gi....

    对于有的更新语句,要更新的表可能条件不够,需要用到left join关联其他表,

    但是不能直接关联,否则报错:错误如下:

    update  imim_gireqbillitems gi 
    left join imim_gireqbills g on g.guid=gi.guid
    set gi.quantity=
    (
        select sum(gi2.quantity)
        from imim_gireqbillitems gi2
        left join imim_gireqbills g2 on g2.guid=gi2.guid
        where g2.ismerge='0' and g2.mergeid=g.mergeid
    )
    where g.ismerge='1' and exists
    (
        select 1
        from imim_gireqbillitems gi2
        left join imim_gireqbills g2 on g2.guid=gi2.guid
        where g2.ismerge='0' and g2.mergeid=g.mergeid
    )
    

    正确实例:

    update 
    (
      select * from imim_gireqbillitems gi 
      left join imim_gireqbills g on g.guid=gi.guid
      where g.ismerge='1'
    ) T
    set T.quantity=
    (
        select sum(gi2.quantity)
        from imim_gireqbillitems gi2
        left join imim_gireqbills g2 on g2.guid=gi2.guid
        where g2.ismerge='0' and g2.mergeid=T.mergeid
    )
    where exists
    (
        select 1
        from imim_gireqbillitems gi2
        left join imim_gireqbills g2 on g2.guid=gi2.guid
        where g2.ismerge='0' and g2.mergeid=T.mergeid
    )
    
    

    Oracle中的 UPDATE FROM 解决方法

    在表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。像sql server提供了updatefrom子句,可以将要更新的表与其它的数据源连接起来。虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就可以在update的表达式中引用要更新的表以外的其它数据。
    例如:

    UPDATE Table2
    SET Table2.ColB = Table2.ColB + Table1.ColB
    FROM Table2 
    INNER JOIN Table1 
    ON (Table2.ColA = Table1.ColA);
    

    实际更新的操作是在要更新的表上进行的,而不是在from子句所形成的新的结果集上进行的。

    Oracle没有update from语法,可以通过两种写法实现同样的功能:

    1:子查询UPDATE A SET A.NAME=(SELECT B.NAME FROM B WHERE B.ID=A.ID),本查询要根据具体情况看看是否变通成如下

    (1)单列

    UPDATE A
    SET A.NAME=(SELECT B.NAME FROM B WHERE B.ID=A.ID)
    WHERE A.ID IN (SELECT ID FROM B)

    (2)多列

    UPDATE order_rollup
    SET(qty,price)=(SELECT SUM(qty),SUM(price) FROM order_lines WHERE customer_id='KOHL' )
    WHERE cust_id='KOHL' AND order_period=TO_DATE('01-Oct-2000')
    

    2:利用视图来做

    UPDATE (SELECT A.NAME ANAME,B.NAME BNAME FROM A,B WHERE A.ID=B.ID)
    SET ANAME=BNAME;
    

    例如:

    UPDATE tablea a
    SET a.fieldforupdate = (SELECT b.fieldsource FROM tableb b WHERE a.keyfield = b.keyfield)
    WHERE EXISTS (SELECT b.fieldsource FROM tableb b WHERE a.keyfield = b.keyfield)
    

    有三点需要注意:

    1. 对于一个给定的a.keyfield的值,SELECT b.fieldsource FROM tableb b WHERE a.keyfield = b.keyfield 的值只能是一个唯一值,不能是多值。
    2. 在绝大多数情况下,最后面的where EXISTS子句是重要的,否则将得到错误的结果。
    3. 对于视图更新的限制:
      如果视图基于多个表的连接,那么用户更新(update)视图记录的能力将受到限制。除非update只涉及一个表且视图列中包含了被更新的表的整个主键,否则不能更新视图的基表。
    展开全文
  • oracle update left join 写法 (修改某列,条件字段在关联表中) 案例: E:考核表 X,:用户表 USERNAME 关联 需求:修改营业部最高分 分析:通过登录账号的营业部ORG_ID 更新E表,E表中无ORG_ID 字段,X表中可以关联....
  • 例如有两个表:user(id, uname, score), student(id, surname, personal_name, score)。现在需要将student表中的学生...实际使用中是设计到了子查询,本例可能并不太适合 (1)在MySQL中,可以直接使用:update ...
  • UPDATE bi_s_region b SET exportmapscope = A.exportmapscope FROM bi_s_region_update A WHERE A.adcd = b.adcd
  • mysql update left join

    千次阅读 2017-08-17 10:30:41
    语句:例如:UPDATE user  LEFT JOIN user_info   ON user.id = user_info.user_id   SET user.validate_time =user_info.va
  • update left join 多表关联更新

    千次阅读 2018-07-03 14:43:28
    UPDATE _black_lists bLEFT JOIN _phone_sections p ON substr(b._mobile, 1, 7) = p._sectionSET b._province = p._provinceName;
  • update 种的left join的操作注意事项

    千次阅读 2018-10-19 19:29:50
    背景 : z_user 的数据少余 account_temp 表  更新掉b表中的a存在的字段 UPDATE z_user b LEFT JOIN account_temp a ON a.mobile = b.mobile SET a....LEFT JOIN z_user b ON a.mobile = b.mobi...
  • oracle update left join

    千次阅读 2018-08-08 15:29:09
    oracle update left join 写法 (修改某列,条件字段在关联表中) 案例: E:考核表 X,:用户表 USERNAME 关联 需求:修改营业部最高分 分析:通过登录账号的营业部ORG_ID 更新E表,E表中无ORG_ID 字段,X表中可以...
  • Update Left Join

    千次阅读 2017-01-16 12:06:59
    Left Join SQL的UPDATE联查更新语句,开始想都没想就要这样做,然后语法出了上网查了下,还真有,以前没这样试过,记录一下方便回忆 1 2 3 4 5 6 7 Update a set a.Manage_FunctID=b.Manage...
  • 单张表自联: UPDATE umbase_disposalstandards t1 left join umbase_disposalstandards t2 on t2.id = t1.id SET t1.timeoutScore = t2.score
  • 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容...update...
  • sql 语句中 update 中where的位置,应该是在set 条件之后;...UPDATE ordersLEFT JOIN freportsON freports.order_id = orders.idset orders.finish_at = freports.created_atwhere orders.id in(1,2,3) ...
  • update table_name01 t1 left join table_name02 t2 on t1.id = t2.refer_id set t1.status = 1 where t2.status =2;
  • oracle中left join和right join的区别浅谈,需要的朋友可以参考一下
  • 如何在SQL中使用JOIN执行UPDATE语句?

    千次阅读 2019-12-10 13:01:53
    join Table2 t2 on t1.JoinField = t2.JoinField where t2.SelectValue = 'FooMyBarPlease'); #14楼 试试这个,我想这对你有用 update ud set ud.assid = sale.assid from ud Inner join sale on ud.id = ...
  • MySQL与SQLServer的update left join语法区别 需求:  表A 字段 A_ID, A_NAME, B_ID  表B 字段 B_ID, B_NAME 需求把A的所有A_NAME更新为相应的B的 B_NAME。  mysql做法: UPDATE A LEFT JOIN B ON A...
  • Mysql的update-left join-where的联合使用 UPDATE sys_user a left join sys_dept b on a.dept_id = b.id left join sys_role_user c on c.user_id = a.id set a.base = 6 where b.full_name like 'aaaaaa%' and c....
  • Update a set a.Manage_FunctID=b.Manage_FunctID From Manage_PageUrl a Left join Manage_ButtonBar b on a.Manage_PageUrlID=b.Manage_PageUrlID Left join Manage_Funct c on b....
  • left join table_2 t2 on t2.id = t1.tid left join table_3 t3 on t2.id = t3.t_id SET t1.username = t2.uname ,t1.number = t3.num ,t1.userphone = t3.mobile where t1.id>5; 如果有更多的表需要关联可以...
  • 在使用update语句的时候我们有时候需要利用left join 关联表,以下是正确操作: 效果,让指定的order表id为1,2,3数据的finish_at字段更新为freports表的created_at字段UPDATE orders LEFT JOIN freports ON ...
  • Update from & Left Join

    千次阅读 2014-02-20 15:45:36
    UPDATE TFSTERMCFG  SET TMS_SOFTWARE_SCHD_NEW_CFG = SOFTWARE_GROUP FROM TFSTERMCFG t1 LEFT JOIN MATERMCFG t2 ON t1.ACQ_ID=t2.ACQ_ID AND t1.MERCHANT_ID= t2.MERCHANT_ID AND t1.TERMINAL_ID=t2.TERMINAL

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 87,864
精华内容 35,145
关键字:

joinleftupdate