oracle关联更新

简介: update某个表时,如果需要和其他表关联,这样的SQL语句在ORACLE中实现起来比较呕心。各个where条件需要分别与一堆select语句嵌套使用才可,晕~~ 以下sql语句是在工作中写出的,做个备忘录: -- 更新应收账款净额update t_0303009 t1   set t1.

update某个表时,如果需要和其他表关联,这样的SQL语句在ORACLE中实现起来比较呕心。各个where条件需要分别与一堆select语句嵌套使用才可,晕~~
以下sql语句是在工作中写出的,做个备忘录:

--  更新应收账款净额
update  t_0303009 t1
   
set  t1.item_value  =  
(
select  t2.item_value
  
from
       (
            
SELECT    a.product_id, a.item_id, b.item_value
                
FROM  ( SELECT  product_id, item_id, item_value
                        
FROM  t_0303009
                       
WHERE  item_id  LIKE   ' B%011 ' ) a,
                     (
SELECT  product_id, item_id, item_value
                        
FROM  t_0303009
                       
WHERE  item_id  LIKE   ' B%008 ' ) b
               
WHERE  a.product_id  =  b.product_id
                 
AND  SUBSTR (a.item_id,  2 6 =  SUBSTR (b.item_id,  2 6 )
                 
AND  a.item_value  =   0
     ) t2
where  t1.product_id  =  t2.product_id
  
and  t1.item_id  =  t2.item_id
)
where  t1.product_id  =  (  select  product_id  from  
       (
            
SELECT    a.product_id, a.item_id, b.item_value
                
FROM  ( SELECT  product_id, item_id, item_value
                        
FROM  t_0303009
                       
WHERE  item_id  LIKE   ' B%011 ' ) a,
                     (
SELECT  product_id, item_id, item_value
                        
FROM  t_0303009
                       
WHERE  item_id  LIKE   ' B%008 ' ) b
               
WHERE  a.product_id  =  b.product_id
                 
AND  SUBSTR (a.item_id,  2 6 =  SUBSTR (b.item_id,  2 6 )
                 
AND  a.item_value  =   0
     ) jj
     
where  t1.product_id  =  jj.product_id
       
and  t1.item_id  =  jj.item_id
     )
and  t1.item_id  =  (  select  item_id  from  
       (
            
SELECT    a.product_id, a.item_id, b.item_value
                
FROM  ( SELECT  product_id, item_id, item_value
                        
FROM  t_0303009
                       
WHERE  item_id  LIKE   ' B%011 ' ) a,
                     (
SELECT  product_id, item_id, item_value
                        
FROM  t_0303009
                       
WHERE  item_id  LIKE   ' B%008 ' ) b
               
WHERE  a.product_id  =  b.product_id
                 
AND  SUBSTR (a.item_id,  2 6 =  SUBSTR (b.item_id,  2 6 )
                 
AND  a.item_value  =   0
                     ) jj2
                     
where  t1.product_id  =  jj2.product_id
                       
and  t1.item_id  =  jj2.item_id
 )

 

 

目录
相关文章
|
Oracle 关系型数据库
ORACLE两表关联更新三种方式
不多说了,我们来做实验吧。
ORACLE两表关联更新三种方式
|
Oracle 物联网 关系型数据库
阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云
5月21日,阿里云PolarDB发布重大更新,提供传统数据库一键迁移上云能力,可以帮助企业将线下的MySQL、PostgreSQL和Oracle等数据库轻松上云,最快数小时内迁移完成。
12504 0
|
关系型数据库 索引 存储
ORACLE大表关联更新提速方法
执行两表关联更新时,oracle一般采用类似nested_loop的更新方式。当依据关联关系将表B的值更新到A表的字段中时,先遍历A表的,对A表的每行记录查询B表的索引,得到b表的结果后再更新到A表。由于存在查询索引的操作,更新每条记录都会至少执行两次io操作。
324332 0
|
数据库 关系型数据库 PolarDB
重磅 | 阿里云PolarDB发布重大更新:支持Oracle等数据库一键迁移上云
今日,阿里云PolarDB发布重大更新,帮助企业一键迁移传统数据库,可以帮助企业将线下的MySQL、PostgreSQL和Oracle等数据库轻松上云,最快数小时内迁移完成。据估算,云上成本不到传统数据库的1/6。目前,已有约40万个数据库迁移到阿里云上。
1418 0
|
Oracle 关系型数据库 数据库
深入解析:你听说过Oracle数据库的更新重启动吗?
更新重启动是 Oracle 中一个隐藏的知识点,当 Oracle 在读取数据时,会构造读一致性,当读取的内容发生了修改,Oracle 会通过 UNDO 信息来还原数据的前镜像,把数据还原到查询发生的时刻,通过构造一致性的结果来实现读取数据的一致性和隔离性。
1494 0
|
SQL 存储 Oracle

推荐镜像

更多