2011-12-13 68 views
0

我正在嘗試編寫一個查詢,該查詢將更新另一個表中匹配行的id的行的schemeid。使用條件從另一個表更新表

tblschemes B就掌握這些方案的細節和tblclaims_liberty一個保持權利要求數據和字段加入關於被b.nett_scheme = a.schemename和a.agentcode = b.agentcode

然後ID查詢下面爲什麼分配schemeid與行代碼不匹配的代理代碼?

update tblclaims_liberty 

set tblclaims_liberty.schemeid = tblschemes.id 

from tblschemes inner join tblclaims_liberty on tblclaims_liberty.schemename = tblschemes.nett_scheme and tblclaims_liberty.agentcode = tblschemes.agentcode 



where 

    ce_report = 'yes' 
    and (tblclaims_liberty.schemeid != tblschemes.id or schemeid is null) --only updates rows that require updateing instead of 6mil+ lines of data. 

有人能指出我在正確的方向?爲什麼它不識別代理碼匹配?

問候,

亞當

回答

1

試試這個:

update tblclaims_liberty TLtoUpdate 
set TLtoUpdate.schemeid = 
(
select TS.id 
from tblschemes TS inner join tblclaims_liberty TL on TL.schemename = TS.nett_scheme and TL.agentcode = TS.agentcode 
where TL.schemeid = TLtoUpdate.schemeid 
) 
where TLtoUpdate.ce_report = 'yes' and TLtoUpdate.schemeid is null 

看起來有缺失的子查詢中的TL.id條件。

+0

查詢不會得到一個值..也許這需要被移動到一個標量函數的存儲過程..認爲這將是一個簡單的任務.. – 2011-12-14 14:31:41