无法修改与非键值保存表对应的列(怎么办?急)

zbo 2005-11-01 06:20:33
update (select tb_spec.attribute2,tb_spec.attribute1
from tb_spec join tb_storage on tb_spec.spec_id=tb_storage.spec_id
where tb_storage.storage_id=47445)
set attribute2='张飞',attribute1='韩国'
执行的出错信息是:无法修改与非键值保存表对应的列
其中tb_spec和tb_storage都是表,不是视图.
他们都有自己的主键,tb_spec的是spec_id,tb_storage的是storage_id.
...全文
1037 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
沝林 2005-11-01
  • 打赏
  • 举报
回复
错误原因前面不是说了吗……
zbo 2005-11-01
  • 打赏
  • 举报
回复
我改成了
select * from tb_spec where spec_id=(select tb_spec.spec_id from tb_spec join tb_storage
on tb_spec.spec_id=tb_storage.spec_id
where tb_storage.storage_id='34072')
可以运行了.
但我想知道题目那么写的错误原因是什么?
沝林 2005-11-01
  • 打赏
  • 举报
回复
楼主可以看看这里:
http://community.csdn.net/Expert/topic/4158/4158385.xml?temp=.8785364
沝林 2005-11-01
  • 打赏
  • 举报
回复
update 后不能跟子查询
-----------------------------
update 可以更新视图的,但前提是关联到的从表的字段必须有主键约束
沝林 2005-11-01
  • 打赏
  • 举报
回复
跟主表的主键没关系,应该是从表的tb_storage.spec_id 没有主键约束条件,你这么写不行,换种写法试试:
update tb_spec a
set attribute2='张飞',attribute1='韩国'
where exists
(select 1 from tb_storage where a.spec_id=b.spec_id and b.storage_id=47445)
zzwind5 2005-11-01
  • 打赏
  • 举报
回复
update 后不能跟子查询

17,086

社区成员

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

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