oracle sql语句——提示无法修改与非键值保存表对应的列

update(selectt.bookida,q.depidbfrombookt,depqwheret.depid=q.id)seta=b;执行后提示“提示无法修改与非键... update (select t.bookid a,q.depid b from book t,dep q where t.depid=q.id)
set a = b;
执行后 提示 “提示无法修改与非键值保存表对应的列”,搜索网上的解决方法,说要建primary key,但我查了一下,我的两个表都是有primary key的,是什么原因引起的呢????
谢谢a5202003的回答,如果把(select t.bookid a,q.depid b from book t,dep q where t.depid=q.id)放到一个临时表了,我怎么把更新后的数据放到原先的表呢??
展开
 我来答
a5202003
推荐于2017-09-16 · TA获得超过2250个赞
知道大有可为答主
回答量:1885
采纳率:75%
帮助的人:596万
展开全部
(select t.bookid a,q.depid b from book t,dep q where t.depid=q.id)返回的是一个结果集,而不是一个表。
如果想update里面的内容,建议把数据放到一个临时表里,然后再update。
没有主键不是说你的原来的两个表的主键,而是指你查询出来的结果集。
uwziq
2012-06-06
知道答主
回答量:4
采纳率:0%
帮助的人:5.2万
展开全部
其实很简单 只要在你的语句中加入一个强制性语句就可以
update (select /*+ BYPASS_UJVC */ t.bookid a,q.depid b from book t,dep q where t.depid=q.id)
set a = b;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
058005
2009-09-11 · TA获得超过414个赞
知道小有建树答主
回答量:301
采纳率:50%
帮助的人:123万
展开全部
update book t
set t.bookid = (select depid from dep q where t.depid=q.id
and rownum <2)
这样应该就可以了
最好去掉rownum <2 这个东东,再加上唯一性条件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式