我在使用Oracle子查詢更新表時報錯:無法修改與非鍵值保存表對應的列,報錯截圖如下:

兩個表,如下圖:

建表陳述句如下:
create table test1(id1 int,id2 int,col1 int,col2 int);
create table test2(id1 int,id2 int,v1 int,v2 int);
初始化資料:
insert into test1(id1,id2,col1,col2)values(11,12,1001,1002);
insert into test1(id1,id2,col1,col2)values(13,14,1003,1004);
insert into test1(id1,id2,col1,col2)values(15,16,1005,1006);
insert into test2(id1,id2,v1,v2) values(21,22,2001,2002);
insert into test2(id1,id2,v1,v2) values(23,24,2003,2004);
insert into test2(id1,id2,v1,v2) values(25,26,2005,2006);
insert into test2(id1,id2,v1,v2) values(27,28,2007,2008);
【要求】:使用子查詢更新表test1,即,將表test1中的col1欄位修改為test2中的v1值;更新條件是test1.id1=test2.id1 and test1.id2=test2.id2。
我的sql陳述句如下(執行報錯,但是不知道原因):
update(
select t1.col1,tt.v1 from test1 t1,
( select id1,id2,max(v1)v1 from test2 t2
group by id1,id2
)tt where t1.id1=tt.id1 and t1.id2=tt.id2
)t set t.col1=t.v1;
報錯截圖如下:

請問這種條件如何使用Oracle中的“子查詢更新表”這種語法呢?
希望哪位能幫忙解決一下,謝謝了!
uj5u.com熱心網友回復:
1、test2表加唯一性索引2、oracle11之前的版本可以 update(
select /*+ BYPASS_UJVC */ t1.col1 ........
uj5u.com熱心網友回復:

oracle 12C 版本不會報錯,能正常執行。
oracle 11.2版本 報錯跟你的一樣。

應該是12C以上才支持你這種寫法了。
uj5u.com熱心網友回復:
用merge 然后用rowid 匹配更新轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/70774.html
標籤:開發
上一篇:資料庫報錯
