转 update关联更新在sqlserver和oracle中的实现
sqlserver和oracle中实现update关联更新的语法不同,都可以通过inline view(内嵌视图)
来实现,总的来说sqlserver更简单些. 测试例子如下:
create table tmp_a
(cpcode varchar2(10),
sb_ym varchar2(6),
flag char(1)
);
create table tmp_b
(cpcode varchar2(10),
sb_ym varchar2(6),
flag char(1)
);
insert into tmp_a(cpcode,sb_ym,flag)values('3201910001','200406','e');
insert into tmp_a(cpcode,sb_ym,flag)values('3201910002','200406','e');
insert into tmp_b(cpcode,sb_ym,flag)values('3201910001','200406','r');
insert into tmp_b(cpcode,sb_ym,flag)values('3201910002','200406','r');
insert into tmp_b(cpcode,sb_ym,flag)values('3201910003','200406','r');
insert into tmp_b(cpcode,sb_ym,flag)values('3201910004','200406','e');
commit;
在SQLSERVER中:
update tmp_b set flag = b.flang from tmp_a a,tmp_b b
where a.cpcode =b.cpcode and a.sb_ym = b.sb_ym;
在Oracle中:
方法一:(效率低)
update tmp_b a
set flag = (select flag from tmp_a b
where a.cpcode = b.cpcode and a.sb_ym = b.sb_ym )
where exists
(select * from tmp_a c
where a.cpcode = c.cpcode and a.sb_ym = c.sb_ym);
Statistics
----------------------------------------------------------
8 recursive calls
3 db block gets
18 consistent gets
0 physical reads
0 redo size
方法二:(效率高)
alter table tmp_a add constraint p_tmp_a primary key (cpcode, sb_ym);
update (select b.flag flagb,a.flag flaga
from tmp_a a,tmp_b b
where a.cpcode=b.cpcode
and a.sb_ym=b.sb_ym)
set flagb=flaga;
Statistics
----------------------------------------------------------
0 recursive calls
3 db block gets
7 consistent gets
0 physical reads
0 redo size
注意:方法二中数据源表必须要加上主键,否则会报错
ORA-01779: 无法修改与非键值保存表对应的列
被修改的表则无需增加主键
转 update关联更新在sqlserver和oracle中的实现的更多相关文章
- sqlserver和oracle中对全半角的转换
oracle中对全半角的转换 to_single_byte(c)转换成半角 to_multi_byte(c)转换成全角 SELECT To_single_byte('881898?71') FROM ...
- SqlServer和Oracle中一些常用的sql语句9 SQL优化
--SQL查询优化 尽量避免使用or,not,distinct运算符,简化连接条件 /*Or运算符*/ use db_business go select * from 仓库 where 城市='北京 ...
- SqlServer和Oracle中一些常用的sql语句8 触发器和事务
--创建和执行事后触发器 --更新仓库备份表中记录时自动创建数据表且插入三条记录 create trigger db_trigger1 on 仓库备份 for update as begin if E ...
- SqlServer和Oracle中一些常用的sql语句10 特殊应用
--482, ORACLE / SQL SERVER --订购数量超过平均值的书籍 WITH Orders_Book AS ( SELECT Book_Name, SUM(Qty) Book_Qty ...
- SqlServer和Oracle中一些常用的sql语句4 局部/全局变量
--把wh1仓库号中姓名含有"平"字的职工工资在原来的基础上加288 update 职工备份 set 工资=工资+288 where 仓库号='wh1' and 姓名 like ' ...
- SqlServer和Oracle中一些常用的sql语句3 行列转换
--217, SQL SERVER SELECT Cust_Name , MAX(CASE WHEN Order_Date ='2009-08-01' THEN AR END) "2009- ...
- SqlServer和Oracle中一些常用的sql语句6 存储过程
--不带参数的存储过程 CREATE procedure proc_sql1 as begin declare @i int set @i=0 while @i<26 begin print c ...
- SqlServer和Oracle中一些常用的sql语句7 游标
declare db_cursor4 scroll cursor for select * from 供应商 --声明游标 open db_cursor4 --打开游标 fetch first fro ...
- SqlServer和Oracle中一些常用的sql语句5 流程控制语句
--在sql语句中 begin...end 用来设定一个程序块 相关于c#中的{} declare @yz real,@w int --声明变量 set @w=120 --为变量赋值 if @w< ...
随机推荐
- 『Scrapy』终端调用&选择器方法
Scrapy终端 示例,输入如下命令后shell会进入Python(或IPython)交互式界面: scrapy shell "http://www.itcast.cn/channel/te ...
- Unity3D中的函数方法和解释
一.刷新函数 Update 当MonoBehaviour启用时,其Update在每一帧被调用. LateUpdate 当Behaviour启用时,其LateUpdate在每一帧被调用. FixedUp ...
- http 请求和格式
get 请求:从指定的资源请求数据. post请求:向指定的资源提交要被处理的数据. head请求:与 GET 相同,但只返回 HTTP 报头,不返回资源实体. option请求:返回服务器支持的 H ...
- bind出现Address already in use解决方法
在socket函数和bind函数之间加入一段代码: // 建立服务器端socket if((server_sockfd = socket(AF_INET, SOCK_STREAM, 0))<0) ...
- JavaScript学习总结(一)——JavaScript基础
一.JavaScript语言特点 1.1.JavaScript是基于对象和事件驱动的(动态的) 它可以直接对用户或客户输入做出响应,无须经过Web服务程序.它对用户的响应,是采用以事件驱动的方式进行的 ...
- js组件的写法
工作之中的不足,报了js培训班,因为工作加班原因缺了几天课(js组件开发),现在拾起来补补 <!doctype html> <html> <head> <me ...
- Android消息通信 第三方开源项目EventBus 的用法
EventBus是github上的一个第三方开发库,其在github上的项目主页地址:https://github.com/greenrobot/EventBus EventBus的消息模型是消息发布 ...
- Python 爬虫常用库(九)
- MyEclipse WebSphere开发教程:WebSphere 7安装指南(一)
[周年庆]MyEclipse个人授权 折扣低至冰点!立即开抢>> [MyEclipse最新版下载] 一.先决条件和系统信息 想要使用WebSphere,您必须拥有MyEclipse Blu ...
- 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165202
2018-2019-2 <网络对抗技术>Exp0 Kali安装 Week1 20165202 一.下载 虚拟机环境 Kali所需要虚拟机软件为VMware,在之前其他课程中使用的即为VMw ...