我有以下查询。
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独立解决方案)
答案 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