Oracle中update和select 關聯操作

1、介紹

本文主要向大傢介紹瞭Oracle數據庫之oracle update set select from 關聯更新,通過具體的內容向大傢展現,希望對大傢學習Oracle數據庫有所幫助。

工作中有個需求,現在新表中有一些數據跟老表的基本一樣,這樣隻需要把老表中數據搬到新表中就可以瞭,同時把不同的字段修改下數據即可,在修改字段時發現,需要指定一個條件,比如主鍵id,來修改某條記錄,這樣一條一條修改效率太低瞭,有沒有批量操作的方式呢?

goods表:

select gid,code,name,code2 from goods; 

init_goods表:

select code,name,code2 from init_goods;

2、解決方法

2.1、需求

goods表中code2根據init_goods表中code2更新;

2.2、錯誤演示

下面是一個錯誤的做法:

update goods set code2 = 
(select code2 from init_goods where init_goods.code = goods.code)

goods表數據無法更新,系統會一直卡主,知道崩潰;

2.3、解決方法

方法一:

update goods set code2 = 
(select code2 from init_goods where init_goods.code = goods.code)
where exists (select 1 from init_goods where init_goods.code = goods.code)

方法二:

update goods goods
set goods.code2 = (select init_goods.code2 from init_goods where init_goods.code = goods.code)
where goods.code = (select init_goods.code from init_goods where init_goods.code = goods.code)

註意:修改的列是code2,條件是 code ;

說明:

如果select 子句可以返回多行記錄,但返回適合where條件的記錄是唯一的,否則將會報返回單行的select子句返回多行的錯誤,因為 update隻能跟據此處的where子句(內層where)進行相應記錄的匹配更新,一次隻能是一條。

到此這篇關於Oracle update和select 關聯的文章就介紹到這瞭,更多相關Oracle update和select 關聯內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: