多表關聯更新

2021-05-25 23:32:06 字數 1294 閱讀 7751

--用優惠表裡面的70006569的優惠的開始時間 來更新lik.temp_yangmm_1115_discnt 的開始時間。

--這就出現問題了第乙個問題 同乙個使用者的70006569 優惠的開始時間可能有好幾個 取哪乙個? 這就需要rank()函式來解決。

--第二個問題更新的時候會出現無法將null值插入.這個問題是因為目標表裡需要更新的記錄數和條件篩選出來的記錄數不一樣。

目標表記錄》條件表。如果不寫where exists 條件他會把 能在條件裡面找到的記錄全都更新為指定值。找不到的就更新為null。

所以要寫上where exists 條件。限制一下更新表的範圍。

update lik.temp_yangmm_1115_discnt dtd

set dtd.start_date =

(select t.ydate

from (select rank() over(partition by user_id order by td.start_date desc) rk,

td.user_id yuser,

td.start_date ydate

from ucr_crm2.tf_f_user_discnt td

where (td.user_id in

(select distinct tp.user_id

from lik.temp_yangmm_1115_discnt tp

where td.user_id = tp.user_id) and

td.discnt_code = 70006569)) t

where t.rk < 2

and dtd.user_id = t.yuser)

where exists (select 1

from (select rank() over(partition by user_id order by td.start_date desc) rk,

td.user_id yuser,

td.start_date ydate

from ucr_crm2.tf_f_user_discnt td

where (td.user_id in

(select distinct tp.user_id

from lik.temp_yangmm_1115_discnt tp

where td.user_id = tp.user_id) and

td.discnt_code = 70006569)) t

where t.rk < 2

and dtd.user_id = t.yuser);

oracle UPDATE 多表關聯更新

update customers a set city name select b.city name from tmp cust city b where b.customer id a.customer id where exists select 1 from tmp cust city b ...

MySQL SQLServer多表關聯更新

方法一 join update t image i inner join t user u on i.user id u.id set i.user name u.name 方法二 子查詢 update t image i set i.user name select name from t use...

oracle多表關聯更新

1.首先將其他表的資料抽取到一張臨時表裡面。create table temp dim2 as select t.stdaddr,s.dzbm from demp dim t,dzmlpxz pt s where t.sdaddr s.mc 2.進行分組查詢,看看裡面的記錄是否有重複的。select...