【发布时间】:2015-10-22 15:50:08
【问题描述】:
我有 2 个表,其中一个列/字段在两个表中都相同,我需要使用表 B 中的数据更新表 A。 这里需要取表 A.x 值并与 B.w 进行比较,并且需要在 A.x 中更新等效的 B.z 值。 x 值与 x1,x2 等不同。因此需要取每个值并与表 B 中的 w 进行比较,并且需要在表 A 中的 x,x1,x2 等中更新等效的 z 值。
Table A (columns j, x, x1,x2,x3..x20 and so on)
---------
j x x1 x2 ..x20 and y y1 y2 .. y20
Table B (columns w and z)
--------
w z
UPDATE TableA a SET a.x = (SELECT b.w
FROM TableB b
WHERE a.x = b.z)
WHERE a.j='somevalue';
如果我这样写我需要写40个更新语句,有没有简单的方法来做这些更新。
子查询可能会返回多行,我也需要对其进行细化。
谢谢, 阿什拉夫
【问题讨论】:
-
你是说你有一大堆列需要在表 A 和 B 中相同?
-
tableA 中的一堆列需要在参考表表 B 中进行比较。所以这里我将 A.x 与 B.w 进行比较,然后取参考值 B.z 并将其更新回 A.x.. 所以这里是 A.x, A. x1..A.x20 需要与表 B 中的参考值进行比较并更新回表中
-
乍一看,这看起来像是一个糟糕的数据库设计。似乎 x1, x2, ... 最好是行而不是列。无论如何,x1、x2 等的更新会是什么样子。 完全和x一样,所以我只是把x换成x1等等?
-
并且请显示在多行匹配的情况下选择哪条记录,正如您在最后一句中提到的那样。
-
类似:
set (x,y,z) = (select b.x, b.y, b.z from ....);