一日,在项目上要用到关联表的多表更新,尝试几种写法,均不对。网上查阅,原来是受了SQL SERVER的影响,写法是按SQL SERVER来的,而Oracle中不支持update 表名 set 字段名 from ...这样的写法,故无法执行。
其实Oracle的多表更新是很容易的,单字段更新写法如下:
update dm_bm bm set bm.bmrs=
(select rs from dm_ryxx rs where rs.jg_dm=bm.jg_dm and rs.bm_dm=bm.bm_dm and bm.yxbz='Y')
where exists (select 1 from dm_ryxx rs where rs.jg_dm=bm.jg_dm and rs.bm_dm=bm.bm_dm and bm.yxbz='Y' )
这里需要用到exists来做条件,否则更新是不正确的。可以适用于多字段的表关系。
多字段更新写法类似:
update dm_czy czy set (czy.bm_dm,czy.zw_dm,czy.stgw_dm)=
(select ryxx.bm_dm,ryxx.zw_dm,ryxx.stgw_dm from dm_ryxx ryxx where czy.czy_dm=ryxx.ry_dm and ryxx.ry_dm='0001')
where exists (select 1 from dm_ryxx ryxx where czy.czy_dm=ryxx.ry_dm and ryxx.ry_dm='0001')
这个写法可比SQL SERVER要简单明了,好用!SQL SERVER是不支持这种写法的。