相关文章推荐
大鼻子的水龙头  ·  .NET Core 和 ASP.NET ...·  9 月前    · 
气势凌人的眼镜  ·  have an error on ...·  1 年前    · 
风流倜傥的烈酒  ·  SpringBoot ...·  1 年前    · 
威武的苹果  ·  sql ...·  1 年前    · 

一、如果两张表有主键关系的话:

UPDATE (SELECT tt1.col1 ,tt2.cola,tt1.id,tt2.id FROM tt1,tt2 WHERE  tt1.ID=tt2.ID)  
SET col1=cola; 

报错:ORA-01779: 无法修改与非键值保存表对应的列

根据错误提示:”无法修改与非键值保存表对应的列”,初步推断为tt2中没有主键?

那么在tt2上添加主键后再更新试试

ALTER TABLE tt2 ADD CONSTRAINT pk_tt2_id PRIMARY KEY(ID);  
UPDATE (SELECT tt1.col1 ,tt2.cola,tt1.id,tt2.id FROM tt1,tt2 WHERE  tt1.ID=tt2.ID)  
SET col1=cola;  

发现可以成功更新数据。

然后将在tt2上加的主键删除,再在tt1上添加主键试试,

ALTER TABLE tt2 DROP CONSTRAINT pk_tt2_id;  
ALTER TABLE tt1 ADD CONSTRAINT pk_tt1_id PRIMARY KEY(ID);  

再执行第3 步中的更新语句,发现还是报错:ORA-01779: 无法修改与非键值保存表对应的列

用A表去更新B表的数据,A表的关联条件必须为主键,Oracle这样做的目的是保证表A的满足关联条件的数据是唯一的,

这样在更新B表数据时才有意义(自己都不确定怎么影响别人,是吧,hehe),

当然,如果两表关联的字段都为主键,则无论谁更新谁都没有问题。

结论:用A表数据更新B表数据,则A与B的对应关系为:1:1 或 1:n。

二、如果两站表无任何关系

1.新建临时表

临时表数据来源为b表,给a表更新

数据结构有最少有主键id,和要更新的列

drop table temp_tt2;
create  GLOBAL TEMPORARY table tt2(
id number(10),
col1_b varchar2(10)
) ON COMMIT PRESERVE ROWS; 

2.不要忘了设置主键

alter table temp_tt2 add constraint pk_id_l primary key (id)

3.从tt2中插入数据到temp_tt2

insert into temp_tt2 
select id,col1 from tt2

4.用临时表和a表关联进行批量更新

UPDATE (SELECT tt1.col1 ,temp_tt2 .col1_b,tt1.id,temp_tt2 .id FROM tt1,temp_tt2 WHERE  tt1.ID=temp_tt2 .ID)  
SET col1=col1_b;  
                    用A表去更新B表的数据,A表的关联条件必须为主键,Oracle这样做的目的是保证表A的满足关联条件的数据是唯一的,再执行第3 步中的更新语句,发现还是报错:ORA-01779: 无法修改与非键值保存表对应的列。根据错误提示:”无法修改与非键值保存表对应的列”,初步推断为tt2中没有主键?这样在更新B表数据时才有意义(自己都不确定怎么影响别人,是吧,hehe),结论:用A表数据更新B表数据,则A与B的对应关系为:1:1 或 1:n。4.用临时表和a表关联进行批量更新。临时表数据来源为b表,给a表更新。
				
上周在做视图更新的时候,报了一个错:ORA-01779: 无法修改与非键值保存对应。 官方文档是这么解释的:ORA-01779cannot modify a column which maps to a non key-preserved table 解决这个问题的关键在于搞清楚什么是Key-Preserved Tables? 上面是官方文档的解释。大致意思:搞清楚key-pr...
#4 目的是为了连接只能匹配出一条数据,通过关联条件实现一对一关系,即A B连接,通过关联条件,A的一条记录只能匹配出B的一条数据。类似于scott.emp.deptno=scott.dept.deptno 必修红框内字段有唯一约束 unique或者PK 必须每个关联都要有where条件,且n个要有n-1个连接条件 待更新的主可以没有主键,唯一性约束等 set语句待修改的字段只能是主字段,也就是等号前面的字段必须是主的字段,否则ora-01776 当数据(非目标)是联合主键时
今天遇到一个错误:ORA-01779无法修改与非键值保存对应。 后来发现,当要对一个基于多连接的视图进行插入,更新等操作时,容易出现这个错误。 解决办法:个人认为,这个视图不能操作,可以对它基于的进行操作,这样,该视图里也就有相应数据了。 于是,做了下面这个实验。 SQL> create table emp2 as select * from emp; 已创建。
ORA-01779: 无法修改与非键值保存对应 alter table 名 add constraint 主键名 primary key(字段名1,字段名2,,,,) 主键名一般设置 :pk_CSDN-Ada助手: 非常感谢您分享的这篇博客,介绍了oracle update join多表关联查询的方法和步骤。对于想要学习数据库操作的人来说,这篇文章非常有用。同时,您的文字表达清晰简洁,让人容易理解。希望您能够继续分享更多类似的技术文章,让大家受益。 在这里,我想补充一些和多表关联查询相关的知识和技能。例如,您可以了解一下外连接(outer join)的概念和用法,以及如何使用子查询(subquery)来实现复杂的多表关联查询。此外,了解如何使用索引(index)来提高查询效率也是很重要的。当然,这些只是相关知识的冰山一角,希望您能够不断学习和探索,提高自己的技术水平。 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2 如果您持续创作,完成第三篇博客,并且质量分达到 80 分以上,在评论区就有机会获得红包奖励哦! java8List 元素对象单字段去重 多字段去重 交集 差集 多字段排序 CSDN-Ada助手: 恭喜用户写出了如此有用的博客,对于我们这些Java开发者来说,这篇博客是非常有帮助的。不仅仅是单字段去重和多字段去重,还涉及了交集、差集和多字段排序,这些都是我们在开发中经常需要用到的功能。非常感谢作者的分享!下一步的创作建议是,可以考虑增加一些实际案例,让读者更好地理解和应用这些技巧。希望作者能够继续努力创作,为我们提供更多优质的技术文章。 CSDN 会根据你创作的前四篇博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply4 看奖励名单。 oracel merge into ,insert into CSDN-Ada助手: 恭喜您写了这篇关于oracel merge into和insert into的博客,内容很实用!接下来,我建议您可以深入探讨一些更高级的SQL操作,例如窗口函数或者CTE(公共表表达式),这些都是非常实用的技巧,也能让读者更好地理解SQL的强大之处。期待您的下一篇博客! CSDN 正在通过评论红包奖励优秀博客,请看红包流:https://bbs.csdn.net/?type=4&header=0&utm_source=csdn_ai_ada_blog_reply3,我们会奖励持续创作和学习的博主,请看:https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply3 java8将list分组转成map CSDN-Ada助手: 恭喜您开始博客创作!Java8将list分组转成map这个主题很有实用价值,期待您能够分享更多有关Java8的技巧和经验。祝您写作愉快! 推荐【每天值得看】:https://bbs.csdn.net/forums/csdnnews?typeId=21804&utm_source=csdn_ai_ada_blog_reply1