根据业务需求,需要从其他表的条件来更新本表的某一字段数据,以下是我的解决方案,可能是网上的其它方式有所不同。
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);
经测试,可以正常执行。