`

update关联更新在sqlserver和oracle中的实现[转]

 
阅读更多

from: http://www.webjx.com/htmldata/2006-01-19/1137630095.html

from: http://www.blogjava.net/pts/archive/2010/11/25/339053.html

 

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: 无法修改与非键值保存表对应的列
被修改的表则无需增加主键

 

分享到:
评论

相关推荐

    oracle及sqlserver关联两个表update.txt

    oracle及sqlserver关联两个数据表进行update,即通过一个表的数据update另一个数据表字段

    Sqlserver2000经典脚本

    介绍就不多说了,下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整...

    经典SQL脚本大全

    │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ ...

    oracle实验报告

    在PL/SQL块中,可以使用SQL的数据查询命令,数据操纵命令和事务控制命令。可使用全部SQL函数。PL/SQL中的SQL语句,可使用SQL的比较操作等运算符。但不能使用数据定义语句。 在PL/SQL块中使用SELECT语句时注意几点...

    程序员的SQL金典.rar

     本书特色:主要介绍SQL的语法规则及在实际开发中的应用,并且对SQL在MySQL、MS SQL Server、Oracle和DB2中的差异进行了分析;详细讲解数据库对增、删、改、查等SQL的支持并给出了相应的SQL应用案例;透彻分析函数...

    SQL中Merge用法详解

    在SQL Server、Oracle数据库中可用,MySQL、PostgreSQL中不可用。MERGE是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表(原数据表,source table)或子查询的连接条件对另外一张...

    经典SQL语句大全

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后...

    程序员的SQL金典4-8

    目录 第1章 数据库入门  1.1 数据库概述  1.1.1 数据库与数据库管理系统  1.1.2 数据库能做什么  1.1.3 主流数据库管理系统介绍  1.2 数据库基础概念 ... A.4 Microsoft SQL Server的安装和使用 显示部分信息

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    Oracle中权限主要分为两种,系统权限和实体权限。  系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。  DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。  RESOURCE:...

    程序员的SQL金典6-8

    目录 第1章 数据库入门  1.1 数据库概述  1.1.1 数据库与数据库管理系统  1.1.2 数据库能做什么  1.1.3 主流数据库管理系统介绍  1.2 数据库基础概念 ... A.4 Microsoft SQL Server的安装和使用 显示部分信息

    程序员的SQL金典7-8

    目录 第1章 数据库入门  1.1 数据库概述  1.1.1 数据库与数据库管理系统  1.1.2 数据库能做什么  1.1.3 主流数据库管理系统介绍  1.2 数据库基础概念 ... A.4 Microsoft SQL Server的安装和使用 显示部分信息

    程序员的SQL金典3-8

    目录 第1章 数据库入门  1.1 数据库概述  1.1.1 数据库与数据库管理系统  1.1.2 数据库能做什么  1.1.3 主流数据库管理系统介绍  1.2 数据库基础概念 ... A.4 Microsoft SQL Server的安装和使用 显示部分信息

    Oracle9i的init.ora参数中文说明

    只有行锁将用于SELECT FOR UPDATE, 但在更新时将获取表锁。 值范围: ALWAYS | DEFAULT | INTENT 默认值: ALWAYS shared_servers 说明 : 指定在启动例程后, 要为共享服务器环境创建的服务器进程的数量。 值范围: ...

    sql经典语句一部分

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后...

    数据库操作语句大全(sql)

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db ...

    经典全面的SQL语句大全

     10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )  11、说明:四表联查问题: select * from a left ...

    asp.net知识库

    Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步...

Global site tag (gtag.js) - Google Analytics