从UPDATE删除重复代码

时间:2013-11-22 12:58:58

标签: sql oracle10g

我有以下查询。

UPDATE A SET b = (SELECT b FROM B WHERE A.a_id = B.a_id AND B.value = ?)

如果B中没有a_id,其中值=?,则可能会使用NULL值填充A.但这没关系,因为在执行此查询之前,确定A.b仅包含NULL值。

但是,我需要更新列的数量来反映执行的更新次数。所以我把它改成了这个:

UPDATE A SET b = (SELECT b FROM B WHERE A.a_id = B.a_id AND B.value = ?)
WHERE EXISTS (SELECT b FROM B WHERE A.a_id = B.a_id AND B.value = ?)

我不喜欢这个解决方案,因为现在我有重复的代码并且必须多次填充参数。当where子句变得更复杂时,这会变得更加丑陋。

有没有办法摆脱这个重复的代码?

(BTW我在Oracle 10上,但我更喜欢DB独立解决方案)

1 个答案:

答案 0 :(得分:1)

使用内部联接进行更新

UPDATE A
INNER JOIN B ON A.a_id = B.a_id
SET A.b = B.b
WHERE B.value = ?

如果您的特定RDBMS不允许这样做,也许您可​​以将旧值和新值选择为别名表表达式并使用它进行更新。见Update statement with inner join on Oracle