先建立一个结构一模一样的表emp1,并为其插入部分数据
create table emp1
as
select * from emp where deptno = 20;
|
update掉emp1中的部分数据
update emp1
set sal = sal + 100,
comm = nvl(comm,0) + 50
|
然后我们试着使用emp1中数据来更新emp中sal 和 comm这两列数据。
我们可以这么写
Update emp
Set(sal,comm) = (select sal,comm. From emp1
where emp.empno = emp1.empno)
Where exists (select 1 from emp1 where emp1.empno =
emp.empno)
|
请你尤其注意这里的where子句,你可以尝试不写where子句来执行以下这句话,你将会使得emp中的很多值变成空。
这是因为在oracle的update语句中如果不写where子句,oracle将会默认的把所有的值全部更新,即使你这里使用了子查询并且某在值并不能在子查询里找到,你就会想当然的以为,oracle或许将会跳过这些值吧,你错了,oracle将会把该行的值更新为空。
我们还还可以这么写:
update (select a.sal asal,b.sal bsal,a.comm acomm,
b.comm bcomm from emp a,emp1 b where a.empno = b.empno)
set asal = bsal,
acomm = bcomm;
|
这里的表是一个类视图。当然你执行时可能会遇到如下错误:
ERROR 位于第 2 行:
ORA-01779: 无法修改与非键值保存表对应的列
这是因为新建的表emp1还没有主键的缘故
下面增加一个主键
alter table emp1
add constraint pk_emp1 primary key (empno);
|
执行之后
在执行前面的语句就能成功。
这里我们总结一下:
在oracle中不存在update from结构,所以遇到需要从另外一个表来更新本表的值的问题的时候,有两种解决的办法:
一种是使用子查询,使用子查询时一定要注意where条件(一般后面接exists子句),除非两个表是一一对应的,否则where条件必不可少,遗漏掉where条件时可能会导致插入大量空值。
另外一种是类视图的更新方法,这也是oracle所独有的。先把对应的数据全部抽取出来,然后更新表一样更新数据,这里需要注意的是,必须保证表的数据唯一型。
分享到:
相关推荐
本篇将详细解释如何在Oracle中高效且准确地只更新两张表对应数据的方法。 首先,我们需要理解表间的关系。在大多数情况下,这两张表可能通过主键外键关系进行关联。例如,一张是员工表(Employees),另一张是部门...
### Oracle中比对两张表之间数据是否一致的几种方法 #### 概述 在Oracle数据库管理中,确保数据的一致性和准确性是非常重要的任务之一。在实际应用中,可能需要经常对比两个表之间的数据是否一致,这有助于发现并...
4. **数据比较**:比较两个数据集的关键字段,如电话号码,以确定在表B中需要更新的记录。 5. **数据更新**:一旦找到匹配项,就可以使用UPDATE语句在表B中替换相应的数据。可能需要使用 transactions 来确保数据...
在Oracle数据库中,有时我们需要同时更新两张相关的表,以保持数据的一致性。本文将详细介绍两种常见的方法:基于`UPDATE`语句的更新和使用`MERGE`语句的差异性合并更新。 首先,我们来看如何使用`UPDATE`语句同时...
这个工具的核心功能是根据一张参考表中的对应数据,来修改另一张目标表中的相应数据。这样的操作在数据分析、数据清洗和信息整合等场景中非常常见。 在上述的示例中,假设我们有一张表A,它包含了上月的短信记录,...
在本文中,我们将讨论如何将 Access 表中的数据导入到 ORACLE 中的两种方法。这些方法将指导您如何使用 ODBC 连接将数据从 Access 导入到 ORACLE 中。 方法一:使用 ODBC 连接 要将 Access 表中的数据导入到 ...
《Oracle与SQL Server数据类型对应关系深度解析》 在数据库领域,Oracle与SQL Server作为业界广泛使用的两大数据库管理系统,各自拥有独特的数据类型体系。当在两者之间进行数据迁移、复制或整合时,理解并掌握其...
分别创建增加、删除、更新的触发器(Trigger)来达到两张表之间数据同步的目的。 1:数据同步增加: 如有两张表——A表和B表,创建触发器使当A表插入数据后B表也同步插入数据。其中B表插入数据的字段需要同A表中的...
Oracle数据库中的多表关联UPDATE语句是用于在一个表中更新数据时,依据另一个表的条件进行操作的关键技术。这在处理复杂的数据同步或修正场景时非常有用。在本例中,我们将探讨如何利用多表关联来更新数据,并通过...
在Oracle数据库中,当需要将一个表的字段值更新到另一个表时,通常可以使用`MERGE INTO`语句来实现。`MERGE INTO`是一个非常强大的SQL操作,它结合了`INSERT`、`UPDATE`和`DELETE`的功能,允许你在匹配条件的基础上...
表空间是Oracle数据库中用于组织和管理数据存储的逻辑单元。每个表空间都与一个或多个数据文件关联,数据文件是数据库中实际存储数据的物理文件。一个表空间可以包含多个数据文件,而每个数据文件只能属于一个表空间...
根据提供的标题、描述以及部分代码内容,我们可以了解到这篇文章主要探讨的是如何在Oracle数据库中查询所有用户表的相关信息,包括表名、主键名称、索引、外键等元数据信息。接下来,我们将对这些知识点进行详细的...
整个数据迁移过程,分为两部分:全量迁移增量迁移过程描述:增量数据收集 (创建oracle表的增量物化视图)进行全量复制进行增量复制 (可并行进行数据校验)原库停写,切到新库架构说明: 一个Jvm Container对应多个...
2. **字段映射**:将Excel列与Oracle表的字段进行对应,确保数据类型匹配。 3. **数据转换**:工具可能支持对数据进行简单的转换,如日期格式转换、数值精度调整等。 4. **错误处理**:在导入过程中,工具会检测并...
例如,如果我们有两张表t1和t2,INNER JOIN会返回t1和t2中num字段相同的记录。 2. LEFT JOIN:LEFT JOIN会返回所有t1表中的记录,即使在t2中没有匹配的记录。对于t1中没有匹配的记录,t2的相关列将填充为NULL。这样...
Oracle提供了对象-关系模式和关系模式两种存储空间数据的方式,而ArcSDE则通过多张关联表来表达空间与属性数据之间的关系,以及空间数据内部结构。 #### Oracle Spatial的空间数据存储机制 Oracle Spatial提供了两...