`

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另一个数据表字段

    oracle和sql server

    - 而在Oracle中,这种嵌套查询的方式不被支持,通常需要使用子查询的方式来实现同样的功能,例如:`UPDATE A SET column = (SELECT column FROM B WHERE condition) WHERE EXISTS (SELECT * FROM B WHERE condition...

    OracleScott SQL Server版

    在 SQL Server 中创建 Oracle Scott 用户的表,首先需要了解 SQL Server 的数据类型和 Oracle 数据类型的对应关系。例如,Oracle 中的 VARCHAR2 类似于 SQL Server 的 VARCHAR,NUMBER 对应 SQL Server 的 DECIMAL ...

    SQL update 多表关联更新的实现代码

    这里我们将探讨如何使用SQL `UPDATE` 语句来实现多表关联更新,特别关注标题和描述中提到的例子。 首先,我们有两个表:A表和B表,它们都有一个共同的字段 `c1`。A表的记录包括 `(1, a1)`, `(2, a2)`, `(3, a3)`, `...

    PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】.docx

    标题中的“PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】”指的是一个PHP编程中的数据库操作类,该类使用PDO(PHP Data Objects)扩展,允许开发者与MySQL、SQL Server和Oracle等多种数据库系统进行...

    sql server的 update from 语句的深究

    在SQL Server中,`UPDATE`语句用于修改现有数据表中的记录。通常,我们使用简单的`UPDATE`语句配合`WHERE`子句来更新特定条件下的行。例如,如果我们有一个名为`Ttest`的表,并且想要将id为123的记录的状态设置为'...

    药店管理系统数据库设计(SQL以及oracle实现)课程论文

    在药店管理系统中,SQL用于定义数据表结构(CREATE TABLE),插入数据(INSERT INTO),查询数据(SELECT),更新数据(UPDATE)以及删除数据(DELETE)。此外,还可以使用SQL的视图(VIEW)、索引(INDEX)、存储...

    Oracle批处理:使用C# 自带Oracle驱动一次执行多条Sql语句

    本文将深入探讨如何在C#中利用Oracle自带的驱动来实现批处理,以一次执行多条SQL语句。 首先,我们需要了解Oracle的数据驱动,即ODP.NET(Oracle Data Provider for .NET)。这是Oracle公司为.NET开发者提供的一个...

    SQL Server笔试题(Sql2000常见笔试题)

    - **更新数据**:UPDATE 用于修改表中已有记录的数据。 - **删除记录**:DELETE FROM 用于从表中删除一条或多条记录。 - **查询数据**:SELECT 用于从表中检索数据,可配合WHERE子句进行条件筛选,ORDER BY进行...

    Sql Server 数据库基础技术

    常见的DBMS有Oracle、PowerBuilder和Sql Server,其中Sql Server在中小型企业中非常流行,因为它易于使用且功能强大。 数据模型是数据库设计的基础,通常包括关系模型,这是Sql Server主要支持的模型。在关系数据库...

    Oracle官方文档合集-SQL参考手册

    由于SQL是跨平台的,虽然标签中提到了Java、MySQL、SQL Server,但Oracle SQL的许多原理和概念对于理解其他SQL方言也有很大帮助。因此,无论是Java开发者、MySQL用户还是SQL Server管理员,都有必要熟悉Oracle SQL的...

    SQL_Server从入门到精通\SQL_Server从入门到精通

    - **表的联合**允许将多个表的数据组合在一起,通过INNER JOIN、LEFT JOIN、RIGHT JOIN等操作实现数据的关联和合并。 - **子查询**是嵌套在另一个查询中的查询,可以作为SELECT、FROM或WHERE子句的一部分,用于复杂...

    sqlserver笔记.docx

    常见的SQL命令包括创建数据库(`CREATE DATABASE`)、删除数据库(`DROP DATABASE`)、切换数据库(`USE DATABASE`)、创建表、修改表结构、删除表、插入数据(`INSERT INTO`)、更新数据(`UPDATE`)和删除数据(`...

    SQL Server 21天自学通

    子查询则是SQL中另一项高级特性,允许在主查询中嵌套查询,用于条件过滤、数据聚合等场景,提升查询灵活性和功能丰富性。 七、数据操作与表管理 数据操作是数据库管理的核心任务之一,主要包括数据的增删改查...

    jdbc连接Oracle数据库实现学生管理系统(数据库连接池实现多用户操作同一数据库)

    在Oracle中,可以通过ALTER TABLE语句定义外键,确保学生表中的班级ID对应班级表的有效ID,保证数据的一致性。 总的来说,这个项目提供了从JDBC连接Oracle数据库,到使用SQL操作数据,再到实现数据库连接池优化的...

    ADODemo2_SQLSERVER

    在这个场景中,我们关注的是一个名为"ADODemo2_SQLSERVER"的项目,它是一个利用MFC(Microsoft Foundation Classes)框架通过ADO(ActiveX Data Objects)来访问SQL SERVER数据库的示例。下面我们将详细探讨这个项目...

    SQLSERVER 入门到熟悉

    标题“SQLSERVER 入门到熟悉”暗示了这份文档是一份SQL Server数据库管理的学习笔记,面向的是初学者。通过阅读文档中的部分内容,可以提炼出以下知识点: 1. 数据库的种类:文档列出了包括Sybase、Oracle、DB2、...

    sqlserver数据库

    SQL Server数据库是一款由微软公司开发的...总之,SQL Server数据库是一个强大且功能全面的数据库管理系统,广泛应用于企业级数据存储和处理,其易用性、灵活性和与Windows生态的深度融合使其在IT行业中占据重要地位。

    SqlServer实现类似Oracle的before触发器示例

    在Oracle数据库中,BEFORE触发器允许在数据修改操作执行之前进行某些处理,比如验证数据、阻止非法操作或者修改即将插入或更新的数据。在SQL Server中,虽然没有直接的BEFORE触发器,但可以通过使用INSTEAD OF触发器...

    PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】

    该文件介绍了一个基于PHP的PDO数据库操作类,支持mysql、sqlserver及oracle数据库,可以实现数据库连接、增删改查等基本操作。PDO是PHP Data Objects的缩写,是一个数据库访问抽象层,它提供了一个统一的方式来访问...

Global site tag (gtag.js) - Google Analytics