oracle多表关联更新(update)/删除(delete)数据表的的写法

 1) 两表(多表)关联update -- 仅在where字句中的连接

SQL 代码
  1. --这次提取的数据都是VIP,且包括新增的,所以顺便更新客户类别
  2. update customers a -- 使用别名
  3. set customer_type='01' --01 为vip,00为普通
  4. where exists (select 1
  5. from tmp_cust_city b
  6. where b.customer_id=a.customer_id
  7. )

2) 两表(多表)关联update -- 被修改值由另一个表运算而来

SQL 代码
  1. update customers a -- 使用别名
  2. set city_name=(select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id)
  3. where exists (select 1
  4. from tmp_cust_city b
  5. where b.customer_id=a.customer_id
  6. )
  7. -- update 超过2个值
  8. update customers a -- 使用别名
  9. set (city_name,customer_type)=(select b.city_name,b.customer_type
  10. from tmp_cust_city b
  11. where b.customer_id=a.customer_id)
  12. where exists (select 1
  13. from tmp_cust_city b
  14. where b.customer_id=a.customer_id
  15. )

注意在这个语句中,
=(
select b.city_name,b.customer_type from tmp_cust_city b
where b.customer_id=a.customer_id )

(
select from tmp_cust_city b
where b.customer_id=a.customer_id)
是两个独立的子查询,查看执行计划可知,对b表/索引扫描了
2篇;

3) 在oracle的 update 语句语法中,除了可以 update 表之外,也可以是视图,所以有以下 1 个特例:

SQL 代码
  1. update (select a.city_name,b.city_name as new_name
  2. from customers a,
  3. tmp_cust_city b
  4. where b.customer_id=a.customer_id
  5. )

二、oracle多表关联删除的两种方法

第一种使用exists方法

  1. delete  
  2. from tableA  
  3. where exits  
  4. (  
  5.      select 1  
  6.      from tableB  
  7.      Where tableA.id = tableB.id  
  8. )  
第二种使用匿名表方式进行删除
  1. delete  
  2. from  
  3. (  
  4.       select 1  
  5.       from tableA,TableB  
  6.       where tableA.id = tableB.id  
  7. )

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Oracle中,可以使用多表关联来进行更新操作。多表关联update可以通过使用子查询或者使用Oracle提供的MERGE语句来实现。 使用子查询进行多表关联update的方式如下: 首先,我们需要编写一个SELECT语句,该语句将返回需要更新的记录。 例如,我们有两个表,分别是table1和table2。我们希望将table2中的某些记录的某个字段的值更新到table1中的相应记录中。我们可以写一个SELECT语句如下: ``` SELECT t1.column1, t2.column2 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id ``` 该SELECT语句将返回需要更新的数据。 接下来,我们需要将该SELECT语句作为子查询,与UPDATE语句结合使用,来进行更新操作。 例如,我们可以编写一个UPDATE语句如下: ``` UPDATE table1 t1 SET t1.column1 = ( SELECT t2.column2 FROM table2 t2 WHERE t1.id = t2.id ) ``` 该UPDATE语句将根据子查询的结果,将table2中的某个字段的值更新到table1中的相应记录中。 此外,还可以使用Oracle提供的MERGE语句来进行多表关联更新操作。MERGE语句可以根据指定的条件,在目标表中执行插入、更新删除操作。 例如,我们可以编写一个MERGE语句如下: ``` MERGE INTO table1 t1 USING table2 t2 ON (t1.id = t2.id) WHEN MATCHED THEN UPDATE SET t1.column1 = t2.column2; ``` 该MERGE语句将根据指定的条件,将table2中的某个字段的值更新到table1中的相应记录中。 总之,Oracle支持多表关联update操作,可以通过子查询或者使用MERGE语句来实现。使用子查询时需要将SELECT语句作为子查询与UPDATE语句结合使用;使用MERGE语句时需要指定条件,并执行相应的更新操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值