oracle学习笔记:update一整列 关联更新
普通的 update
都是根据条件来对部分列的内容进行修改,用法如下:
update temp_cwh_table set name = 'xxx'
where id = 1;
假设现在有2张表:A、B,需要关联A、B表,根据相同的 id
来 update
A表。
建立测试表
-- 创建测试表 temp_cwh_001
create table temp_cwh_001
(
id int,
name varchar2(20)
);
-- 插入数据
insert into temp_cwh_001 values (1,'AA');
insert into temp_cwh_001 values (2,'BB');
insert into temp_cwh_001 values (3,'CC');
-- 查询
select * from temp_cwh_001
-- 1 1 AA
-- 2 2 BB
-- 3 3 CC
-- 创建测试表 temp_cwh_002
create table temp_cwh_002
(
id int,
name varchar2(20)
);
-- 插入数据
insert into temp_cwh_002 values (1,'CCCC');
insert into temp_cwh_002 values (2,'DDDD');
-- 查询
select * from temp_cwh_002
-- 1 1 CCCC
-- 2 2 DDDD
关联更新
-- 关联更新
update temp_cwh_001 a
set name = (select b.name from temp_cwh_002 b where a.id = b.id);
-- 提交
commit;
-- 查询
select * from temp_cwh_001;
-- 1 1 CCCC
-- 2 2 DDDD
-- 3 3
本意只是将关联得上的内容进行update,关联不上的内容不修改。但此用法下,关联不上的内容直接被update为null,需再度优化。
- 方法一
-- 关联更新
update temp_cwh_001 a
set name = (select b.name from temp_cwh_002 b where a.id = b.id)
where id = (select b.id from temp_cwh_002 b where a.id = b.id)
-- 提交
commit;
-- 查询
select * from temp_cwh_001;
-- 1 1 CCCC
-- 2 2 DDDD
-- 3 3 CC
添加where条件过滤,符合条件。
- 方法二:使用exists
-- 关联更新
update temp_cwh_001 a
set name = (select b.name from temp_cwh_002 b where a.id = b.id)
where exists (select 1 from temp_cwh_002 b where a.id = b.id)
-- 提交
commit;
-- 查询
select * from temp_cwh_001;
-- 1 1 CCCC
-- 2 2 DDDD
-- 3 3 CC
- 方法三
update (select a.name aname,
a.id aid,
b.name bname,
b.id bid
from temp_cwh_001 a,
temp_cwh_002 b
where a.id = b.id)
set aname = bname
报错: ORA-01779: cannot modify a column which maps to a non key-preserved table
需要主键的支持
alter table temp_cwh_001 add primary key(id);
alter table temp_cwh_002 add primary key(id);
重新执行,便可。
这种方法的局限性就是需要primary的支持。
- 方法四
可以使用存储过程的方式进行灵活处理,不过这里有点复杂。。暂且记录。。
declare
cursor cur_wm is select name, id from temp_cwh_002;
begin
for my_wm in cur_wm loop
update temp_cwh_001 set name = my_wm.name
where id = my_wm.id;
end loop;
end;
执行之后,PL/SQL procedure successfully completed.
oracle学习笔记:update一整列 关联更新的更多相关文章
- SQL反模式学习笔记10 取整错误
目标:使用小数取代整数 反模式:使用Float类型 根据IEEE754标识,float类型使用二进制格式编码实数数据. 缺点:(1)舍入的必要性: 并不是所有的十进制中描述的信息都能使用二进制存储,处 ...
- oracle学习笔记第一天
oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字 1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...
- Oracle学习笔记之四,SQL语言入门
1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- Oracle学习笔记—数据字典和常用命令(转载)
转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...
- Oracle学习笔记——点滴汇总
Oracle学习笔记——点滴汇总 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster
- Oracle学习笔记之四sp1,Oracle 11g的常用函数
从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i) 分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...
- 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子
1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...
- oracle学习笔记(一)用户管理
--oracle学习第一天 --连接 @后面连接数据库实例,具体连接到那个数据库 conn scott/tiger@MYORA1; --修改密码 passw; --显示用户 show user; -- ...
随机推荐
- Angular 中的数据交互(get jsonp post)
一.Angular get 请求数据 Angular5.x 以后 get.post 和和服务器交互使用的是 HttpClientModule 模块. 1.在 app.module.ts 中引入 并注入 ...
- angular绑定数据
Angular 中使用{{}}绑定业务逻辑里面定义的数据 <h1> Welcome to {{ title }}! /*引入title*/ </h1> export class ...
- pytorch常用normalization函数
参考:https://blog.csdn.net/liuxiao214/article/details/81037416 归一化层,目前主要有这几个方法,Batch Normalization(201 ...
- osg 添加 fbx插件 osg中编译fbx
使用osg加载fbx模型,需要自己编译fbx插件,编译流程与插件使用案例如下 代码地址:https://github.com/shelltdf/osgFBX CMake Error: The foll ...
- 好用的开源SVN仓库
1.地址 https://svnbucket.com/#/projects 2.简单注册使用即可
- linux简单命令1
1:-rw-r--r-- 第一位"-"表示文件类型("-"文件,"d"表示目录,"|"软连接,相当win7的快捷方式) ...
- mysql常用命令、非交互式mysql命令看29条
CentOS下mysql数据库常用命令总结1.更改root密码 mysqladmin -uroot password 'yourpassword' 2.远程登陆mysql服务器 mysql -uroo ...
- 多林环境中的ADFS
公司有两个或更多Active Directory林,但是只有一个ADFS,如何让ADFS支持多个域林呢?(一个ADFS只能部署在一个域中,不能跨域) 答案是:在部署ADFS的林和所有其他林之间建立双向 ...
- 比较SSO协议: WS-Fed, SAML, and OAuth
真实比喻 在我们获得技术之前,让我们用完全非技术性的东西来解决这个问题.作为工程师,我们非常注重将事情分解为组件和流程.这有助于我们了解事情,以便我们可以排除故障或构建复杂的系统.当你去机场登机时,你 ...
- 慕课零基础学java语言翁恺老师——第一周编程题
温度转换(5分) 题目内容: 写一个将华氏温度转换成摄氏温度的程序,转换的公式是: °F = (9/5)*°C + 32 其中C表示摄氏温度,F表示华氏温度. 程序的输入是一个整数,表示华氏温度.输出 ...