日期:2014-05-17  浏览次数:21116 次

多表更新问题,附有源码
update work_cld_define a
   set a.workcld_typeid = 'aaaaaaaa'
   from work_cld_define a, work_cld_type b, work_cld_typetime c
 where a.workcld_typeid = b.workcld_typeid
   and b.workcld_typeid = c.workcld_typeid
   and a.workclddefineid = 'bbbbbbb'
   and c.workcld_timeid = 'cccccccc'

请问大家这个为什么会报ORA-00933SQL命令为正确结束错误,找了半天找不到

------解决方案--------------------
看错了,应该是这个:
update work_cld_define a
   set a.workcld_typeid = 'aaaaaaaa'
 where a.workcld_typeid =
       (select b.workcld_typeid
          from work_cld_type b, work_cld_typetime c
         WHERE b.workcld_typeid = c.workcld_typeid
           AND c.workcld_timeid = 'cccccccc')
   and a.workclddefineid = 'bbbbbbb'

------解决方案--------------------

--前段时间有做过类似的功能
--视图,想法来源:select * from a for update
update (视图) a
set a.name=a.name_new
....
--说是视图,其实是复杂的关联语句
select a.* from a
left join b on a.id=b.id
...
--最后还有一点要注意,就是更新只能更新一张表的数据
--就是视图里面只能是表a 或者表b的,这个是update本身的限制
--希望对楼主有用...