使用多个条件将一个 table 中的值替换为另一个 table 中的值

replacing vales in one table with values from another table using multiple criteria

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

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 table 有大约 15,000 个条目,所以这段代码最终只会替换其中的大约 100 个

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

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

谢谢