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

来源:百度知道 编辑:UC知道 时间:2024/07/08 20:27:26
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)放到一个临时表了,我怎么把更新后的数据放到原先的表呢??

(select t.bookid a,q.depid b from book t,dep q where t.depid=q.id)返回的是一个结果集,而不是一个表。
如果想update里面的内容,建议把数据放到一个临时表里,然后再update。
没有主键不是说你的原来的两个表的主键,而是指你查询出来的结果集。

其实很简单 只要在你的语句中加入一个强制性语句就可以
update (select /*+ BYPASS_UJVC */ t.bookid a,q.depid b from book t,dep q where t.depid=q.id)
set a = b;

update book t
set t.bookid = (select depid from dep q where t.depid=q.id
and rownum <2)
这样应该就可以了
最好去掉rownum <2 这个东东,再加上唯一性条件