Oracle關聯兩張表批量修改某個字段

2021-10-08 01:48:44 字數 2096 閱讀 3458

有兩張表a、b,需要關聯這兩張表,對錶a中的某個字段,批量進行更新。

一、業務描述:現有表a、b分別儲存使用者基本資訊,且有主鍵可以關聯。因為資料新舊等關係,表a、b中的資料不一致(表a,標紅的內容),比如姓名、性別等,且表b中的資訊是準確的。現有檢視a,需要從表a中獲取資料,因此,需要關聯表b,對錶a中的姓名、性別進行校對(更新)

二、資料表結構

表a

主鍵:user_id,字段:name,age,***

user_id

name

age***

001佚名

18歲男

002匿名

19歲男

003未知

20歲男

004匿名

21歲女

表b

主鍵:user_id,字段:name,age,***

user_id

name

age***

001張三

18歲1

002李四

19歲2

003王五

20歲1

004趙六

21歲1

檢視a

使用者編號

姓名年齡

性別****

家庭住址

……001

張三18歲

男002

李四19歲

女003

王五20歲

男004

趙六21歲

create

view a as

select

*from table_a;

三、關聯a、b表,批量更新a表某字段的語句

update table_a t1 

set t1.name=

(select

max(t2.name)

from table_b t2

where t1.user_id= t2.use_id)

where t1.user_id>

0and

exists

(select t2.name

from table_b t2

where t1.user_id= t2.user_id)

;

四、實現效果

create

view a as

select

t1.user_id,

nvl(t1.name,t2.name)

,--同時從a,b表取姓名,a表優先,保證檢視a中name不為空

nvl(t1.age,t2.age)

,--同時從a,b表取年齡,a表優先,保證檢視a中age不為空

case

--同時從a,b表取性別,a表優先,a錶值為空時,取b表,並做性別轉換,保證檢視a中***不為空

when t1.*** is

notnull

then

t1.***

when t1.*** is

null

then

case

when t2.*** =

1then

'男'when t2.*** =

2then

'女'else

'--'

endend

as ***

from table_a t1,table_b t2;

關聯a、b更新後,獲取到了正確的姓名和性別。

使用者編號

姓名年齡

性別****

家庭住址

……001

張三18歲

男002

李四19歲

女003

王五20歲

男004

趙六21歲

五、批量更新常見問題

ORACLE 關聯兩張表批量更新資料,實用方法

case 表一 新增字段 age,需要從 表二中 將age資料同步到表一中,或者 單純同步兩張表中的資料 表1 employee 被更新的表 字段 age 表2 t user 資料 表 只更新表1中 age 為null的資料 update employee e set age select u.ag...

SQL兩張表如何關聯

比如 我有table1 和 table2 兩張表table1 id name 1 張三 男 2 李四 女 3 王五 男table2 比如 我有table1 和 table2 兩張表 table1 id name 1 張三 男 2 李四 女 3 王五 男 table2 id hobby lid 1 下...

兩張表關聯比較記錄是否相同

問題 已知兩張表ta tb,這兩張表的表結構完全相同。現在有這樣的要求,ta是根據要求按一定頻率抽取的資料,tb是儲存發生變化的表。每次抽取ta表,都會比較ta tb表,看這兩個表中是否存在完全一樣的資料項值。例子 ta tb的主鍵是ca1,則使用ta和tb表中的其他字段值比較 on ta.ca1 ...