使用多个条件使用另一个表中的值替换一个表中的值

时间:2015-06-18 16:28:38

标签: sql-server database sql-update inner-join

我有两个表,一个名为accajd,下面显示了截图,其中包含旧值和新值。还有一个名为jobcost的大约15个字段,其中3个需要使用accadj表(accno,jno和saccno)中的数据进行更新。我需要做的是在工作成本的任何地方,来自accno,jno和saccno字段的数据与来自accadj的accnoold,jnoold和saccnoold匹配,我需要用来自accnonew,jnonew和的值来替换jobcost中的数据来自accadj的saccnonew。

accadj database sample

update jobcost 
set accno =(SELECT accadj.[accnonew] FROM accadj 
   WHERE accadj.id = jobcost.[jno] 
  AND accadj.[saccnoold] = jobcost.[saccno]),
jno =(SELECT accadj.[accnonew] FROM accadj 
   WHERE accadj.id = jobcost.[jno] 
  AND accadj.[saccnoold] = jobcost.[saccno]),
saccno =(SELECT accadj.[accnonew] FROM accadj 
   WHERE accadj.id = jobcost.[jno] 
  AND accadj.[saccnoold] = jobcost.[saccno])

就编写一个查询来完成这项任务而言,这是我能想到的一切,而且它无处可靠。 jobcost表有大约15,000个条目,因此这段代码最终只能替换其中的大约100个

1 个答案:

答案 0 :(得分:1)

检查下面的代码,它肯定会起作用,

Update jc
set jc.accno = ac.accnonew,jc.jno =ac.accnonew,jc.saccno =ac.saccnonew
from jobcost jc join accadj ac with(nolock)
on jc.accno  = ac.accnoold
and jc.jno  = ac.jnoold
and jc.saccno =ac.saccnoold

由于