多表更新问题,附有源码

ChengHaiWangZi 2013-04-20 12:08:01
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命令为正确结束错误,找了半天找不到
...全文
119 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
feisheng512 2013-04-24
  • 打赏
  • 举报
回复
引用 9 楼 ChengHaiWangZi 的回复:
引用 4 楼 gaojiebao123 的回复: 看错了,应该是这个: SQL code ? 12345678 update work_cld_define a set a.workcld_typeid = 'aaaaaaaa' where a.workcld_typeid = (select b.workcld_typeid ……
================== oracle更新操作中貌似没有提供from 我查的资料里面没有类似于sqlserver多表更新格式的; 至于优化方面,我只能单纯的从关联语句上来说:尽量简化,当然存储过程比起sql语句来要优一点,而且是更新操作,可以考虑存储
ChengHaiWangZi 2013-04-23
  • 打赏
  • 举报
回复
引用 4 楼 gaojiebao123 的回复:
看错了,应该是这个: SQL code ? 12345678 update work_cld_define a set a.workcld_typeid = 'aaaaaaaa' where a.workcld_typeid = (select b.workcld_typeid from work_cld_type b, wo……
oracle update操作,什么时候应该用from
ChengHaiWangZi 2013-04-23
  • 打赏
  • 举报
回复
引用 2 楼 llycamo 的回复:
b表不需要吧。。。。c表直接连接不就行了。。。 update work_cld_define a set a.workcld_typeid = 'aaaaaaaa' where a.workclddefineid = 'bbbbbbb' and a.workcld_typeid in ( select c.workcld_typeid from work_cld_typetime ……
b表示必须要用到,谢谢你的回答
ChengHaiWangZi 2013-04-23
  • 打赏
  • 举报
回复
引用 5 楼 feisheng512 的回复:
SQL code ? 12345678910111213 --前段时间有做过类似的功能 --视图,想法来源: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 ... --……
视图和表关联哪个更新最优
feisheng512 2013-04-21
  • 打赏
  • 举报
回复

--还有另外一个问题 就是,如果更新表时涉及到常量,也需要在视图中体现
--复杂的查询语句==》视图
select a.*,1 as static_int,'aa' as static_var from a
left join b on a.id=b.id
feisheng512 2013-04-21
  • 打赏
  • 举报
回复

--前段时间有做过类似的功能
--视图,想法来源: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本身的限制
--希望对楼主有用...
gaojiebao123 2013-04-20
  • 打赏
  • 举报
回复
看错了,应该是这个:
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'
gaojiebao123 2013-04-20
  • 打赏
  • 举报
回复
试试下面的SQL:
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 = (select b.workcld_typeid from work_cld_type b)
   and b.workcld_typeid = (select c.workcld_typeid from work_cld_typetime c where c.workcld_timeid = 'cccccccc')
   and a.workclddefineid = 'bbbbbbb'
  -- and c.workcld_timeid = 'cccccccc'
llycamo 2013-04-20
  • 打赏
  • 举报
回复
b表不需要吧。。。。c表直接连接不就行了。。。 update work_cld_define a set a.workcld_typeid = 'aaaaaaaa' where a.workclddefineid = 'bbbbbbb' and a.workcld_typeid in ( select c.workcld_typeid from work_cld_typetime c where c.workcld_timeid = 'cccccccc' )
llycamo 2013-04-20
  • 打赏
  • 举报
回复
Oracle没有update from语法,oracle中的update无法多表连接的,用子查询吧。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧