oracle关联表更新

如果有A表和B表,sql server中用:
update A set field2=b.filed2 from A,B where a.field1=b.field1搞定,所以用惯了sql server的更新表语句,再用oracle的那真是特别的拗口。
情景一:如果只是更新固定值,oracle和sql server相差不大:
update A set field2=‘OK’
where exists(select 1 from B where a.field1=b.field1)


情景一:更新内容为关联表中字段
oracle更新关联表的语法有些臃肿。
update A set field2=(select b.field2 from B where a.field1=b.field1)
where exists(select 1 from B where a.field1=b.field1)
对于子查询的值只能是一个唯一值,不能是多值。
另外oracle也变通了方法,用视图的方式简化:
update(select A.field2 as Afield2,B.field2 as Bfiled2 from A,B where A.field1=B.field1)
set Afield2=Bfield2

情景三:更新内容为关联表中多个字段

如果按情景二的语法,是多个字段更新岂不累死人:
update A set field3=(select b.field3,b.field4 from B where a.field1=b.field1),field4=(select b.field4,b.field4 from B where a.field1=b.field1)
where exists(select 1 from B where a.field1=b.field1)

还好有如下简化语句:
update A set (field3,field4)=(select b.field3,b.field4 from B where a.field1=b.field1)
where exists(select 1 from B where a.field1=b.field1)

你可能感兴趣的:(数据库)