有兩張表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 ...