转自:http://blog.csdn.net/leeboy_wang/article/details/8099942
Oracle没有update from语法,可以通过两种实现方式:
1、利用子查询:
update A
SET 字段1=(select 字段表达式 from B WHERE ...),
字段2=(select 字段表达式 from B WHERE ...)
WHERE 逻辑表达式
UPDATE多个字段两种写法:
写法一:
UPDATE table_1 a
SET col_x1 = (SELECT b.col_y1, b.col_y2 FROM table_2 b WHERE b.col_n = a.col_m),
col_x2 = (SELECT b.col_y2 FROM table_2 b WHERE b.col_n = a.col_m)
WHERE EXISTS (SELECT * FROM table_2 b WHERE b.col_n = a.col_m)
或
UPDATE table_1 a
SET col_x1 = (SELECT b.col_y1, b.col_y2 FROM table_2 b WHERE b.col_n = a.col_m),
col_x2 = (SELECT b.col_y2 FROM table_2 b WHERE b.col_n = a.col_m)
WHERE a.col_m=(SELECT b.col_n FROM table_2 b WHERE b.col_n = a.col_m)
写法二:
UPDATE table_1 a
SET (col_x1, col_x2) = (SELECT b.col_y1, b.col_y2 FROM table_2 b WHERE b.col_n = a.col_m)
WHERE EXISTS (SELECT * FROM table_2 b WHERE b.col_n = a.col_m);
或
UPDATE table_1 a
SET (col_x1, col_x2) = (SELECT b.col_y1, b.col_y2 FROM table_2 b WHERE b.col_n = a.col_m)
WHERE a.col_m=(SELECT b.col_n FROM table_2 b WHERE b.col_n = a.col_m)
注意:
1. 对于子查询的值只能是一个唯一值,不能是多值。
2. 子查询在绝大多数情况下,最后面的where EXISTS子句是重要的,否则将得到错误的结果。且where EXISTS子句可用另一方法代替,如上。最后的子句是对a表被更新记录的限制,如无此句,对于a表中某记录,如在b表中关联不到对应的记录,则该记录被更新字段将被更新为null。where EXISTS子句就是排除对a表中该情况的记录进行更新。
2、利用视图:
UPDATE (SELECT A.NAME ANAME,B.NAME BNAME FROM A,B WHERE A.ID=B.ID)
SET ANAME=BNAME;
注意:
1. 对于视图更新的限制:
如果视图基于多个表的连接,那么用户更新(update)视图记录的能力将受到限制。除非update只涉及一个表且视图列中包含了被更新的表的整个主键,否则不能更新视图的基表。
另外,Oracle中的Delete的from子句也没有多表联接的功能,只能通过子查询的方式来做:
delete from 表A where exists (select * from 表B where 表A.empid=表B.empid)
delete from 表A where 表A.empid in (select empid from 表B)
分享到:
相关推荐
总结,Oracle的多表关联UPDATE语句是一种强大的工具,能够有效处理跨表的数据更新需求,确保数据的一致性和准确性。在实际应用中,应根据业务逻辑和数据关系选择最适合的更新方法,并进行充分的测试以确保其正确性和...
Oracle数据库中的多表关联UPDATE语句是用于在一个表中更新数据时,依据另一个表的条件进行操作的关键技术。这在处理复杂的数据同步或修正场景时非常有用。在本例中,我们将探讨如何利用多表关联来更新数据,并通过...
在Oracle数据库中,进行多表关联的批量插入、批量更新和批量删除操作是常见的数据库管理任务,尤其是在处理大量数据时,这些操作能显著提高效率并减少资源消耗。本文将详细探讨这三个方面,并通过实例代码来展示如何...
UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXISTS (SELECT 1 FROM 表1 WHERE 表1.A = 表2.A); 尤其注意最后的外层where条件尤为重要,是锁定其批量更新数据的范围。 方法二: ...
#### 一、Oracle关联更新概述 在Oracle数据库中,进行数据更新操作时,有时需要根据另一个表中的数据来更新当前表的数据,这就是所谓的“关联更新”。关联更新通常用于保持两个或多个表之间的一致性,确保数据的...
Oracle数据库在多表关联更新中的应用研究主要集中在如何高效、准确地处理复杂的数据操作,尤其在涉及多个表之间关系的数据更新场景。在这个案例中,研究背景是一家名为仪刘鑫梓的大型百货连锁销售公司,该公司正在...
这种方式比标准 Update 语句更灵活,可以关联多个表,并且执行速度快。但是,表 B 的主键必须在 where 条件中,并且是以“=”来关联被更新表,否则将报错。 三、Merge 更新法 Merge 更新法是 Oracle 特有的语句,...
当更新操作涉及到多表关联且逻辑较为复杂时,可以使用PL/SQL的游标(cursor)来进行逐行处理。通过for循环遍历游标中的数据,可以在循环体中执行具体的更新操作。例如: ```sql BEGIN FOR cr IN ( SELECT a....
oracle及sqlserver关联两个数据表进行update,即通过一个表的数据update另一个数据表字段
这里我们将探讨如何使用SQL `UPDATE` 语句来实现多表关联更新,特别关注标题和描述中提到的例子。 首先,我们有两个表:A表和B表,它们都有一个共同的字段 `c1`。A表的记录包括 `(1, a1)`, `(2, a2)`, `(3, a3)`, `...
在数据库编程领域,多数据表关联是一个常见的需求,特别是在复杂的业务逻辑中。Delphi作为一款强大的Windows应用程序开发工具,提供了多种方法来处理这种关联。本文将深入探讨在Delphi中如何实现多数据表关联,主要...
Skyline与Oracle数据库坐标关联的操作说明包括创建表字段、给表 user_sdo_geom_metadata 添加数据、创建索引和更新数据四个步骤。只有遵循这四个步骤,才能确保坐标数据的正确性和一致性。 Skyline与Oracle数据库...
- 当涉及到多表联接时,`FOR UPDATE OF`可以更加灵活地控制锁定的列: ```sql SELECT * FROM Table1 a JOIN Table2 b ON a.pkid = b.pkid FOR UPDATE OF a.pkid; ``` 这条语句仅锁定`Table1`中的`pkid`列,`...
当需要从多个表中提取信息并更新主表时,多表关联`UPDATE`就显得尤为重要。例如,从临时表`tmp_cust_city`中提取更准确的城市信息并更新到`customers`表中,同时可能还需要更新客户类型: ```sql UPDATE customers a...
2) **两表关联UPDATE**: 在这种形式中,我们使用EXISTS子句与一个临时表(tmp_cust_city)进行关联。这允许我们仅更新那些在临时表中存在的记录。这种方式更安全,因为它不会误更新不匹配的数据。同时,由于我们只...
3. **多对多**:两个表之间存在多对多的关系时,通常会引入第三个表(关联表)来连接它们,该关联表中包含两个表的主键作为其外键。 #### 四、触发器的设置 触发器是一种特殊类型的存储过程,它被定义为当特定事件...
在Oracle数据库中,有时我们需要对大量数据进行更新操作,这在很多业务场景中都非常常见。针对这一需求,本文将详细介绍并比较三种常用的批量更新方法:通过PL/SQL循环更新、使用单条SQL语句更新以及采用子查询的...
在数据库管理中,多表级联更新是一种常见的操作,特别是在关系型数据库如Oracle中,当多个表之间存在关联时,我们需要确保数据的一致性。在本篇内容中,我们将深入探讨如何在Oracle中实现多表级联更新,尤其是通过...