【发布时间】:2015-06-18 16:28:37
【问题描述】:
我有两张表,一张名为 accajd,截图如下所示,其中包含旧值和新值。一个叫做 jobcost,有大约 15 个字段,其中 3 个需要使用 accadj 表(accno、jno 和 saccno)中的数据进行更新。我需要做的是工作成本中的任何地方,来自 accno、jno 和 saccno 字段的数据与来自 accadj 的 accnoold、jnoold 和 saccnoold 匹配,我需要用来自 accnonew、jnonew 和的值替换 jobcost 中的数据来自 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 表有大约 15,000 个条目,所以这段代码最终只会替换其中的大约 100 个
【问题讨论】:
-
正如所写的那样,您的代码不会更新任何内容,因为您不能有多个 where 子句,其中的逗号我不太明白。
-
代码是一个糟糕的尝试来实现它,我在其他页面上看到了内部连接的使用,但我不知道如何使用这些。基本上如果所有 3 列都匹配,则将所有 3 列替换为新值。我完全不知道如何做到这一点,但是当我不输入某种尝试的代码时,我会在这里被骂
-
更新 jobcost SET accno =(SELECT accadj.[accnonew] FROM accadj WHERE accadj.[jnoold]=jobcost .[jno] AND accadj.[saccnoold] = jobcost.[saccno]);跨度>
-
我没有 id 列。没有一列包含所有唯一信息,这就是为什么它们必须在多个字段上匹配
-
尝试在你的代码中实现上面的代码可能行得通
标签: sql-server database sql-update inner-join