使用条件更新另一个表中的表

时间:2011-12-13 17:04:54

标签: sql sql-server tsql

我正在尝试编写一个查询,该查询将使用另一个表中匹配行的id更新行的schemeid。

tblschemes b保存方案详细信息,tblclaims_liberty a保存声明数据,并且要加入的字段是b.nett_scheme = a.schemename和a.agentcode = b.agentcode

为什么然后id下面的查询将一个schemeid分配给与agentcode不匹配的数据行?

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 个答案:

答案 0 :(得分: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条件。

相关问题