什么是在oracle中减少多个更新语句的正确方法

时间:2015-10-22 06:14:30

标签: sql oracle oracle11g

我有2个表,其中一个列/字段在两个表中都相同,我需要使用表B中的数据更新表A. 这里需要采用表A.x值并与B.w和等效物进行比较B.z值需要在A.x中更新。 x值不同于x1,x2等。因此需要采用每个值并与表B中的w进行比较,并且需要在表A中的x,x1,x2等中更新等效的z值。

ENV processors 4
ENTRYPOINT ["/tini", "--", "mpirun", "-np", "$processors"] # doesn't work

如果我这样编写,我需要编写40更新语句,有没有简单的方法来进行这些更新。

子查询可能会返回多行,我也需要对其进行优化。

谢谢, 阿什拉夫

1 个答案:

答案 0 :(得分:0)

由于a.x具有另一个值a.x1和a.x2等,当然每个值需要一个子查询,因为它是您想要查找的不同b记录。

UPDATE TableA a 
SET a.x = (SELECT b.w FROM TableB b WHERE a.x = b.z)
  , a.x1 = (SELECT b.w FROM TableB b WHERE a.x1 = b.z)
  , a.x2 = (SELECT b.w FROM TableB b WHERE a.x2 = b.z)
  ...
WHERE a.j = 'somevalue';

您可能需要考虑更改tableA的表设计,以便让行包含值而不是列。这将使更新(以及一般的查询)变得更加容易。