2

我想从 Table1 表中更新 Table2 表中的多个列。临时表中可能有空值。我只想更新在 Table1 表中具有值的数据 - 而不是 NULL 值。

请指教

例如

Table 1                             Table 2
ID    col11   col2     col3         ID1      col1       col2       col3
3     test    xxxx     (null)       3        (null)   jjj        ffffff
5     (null)  yyyyy    zzzzzz       5        dddd     (null)     lllllllll

输出

ID      col1      col2      col3
3        test     xxxx      ffffff
5        dddd     yyyyy     zzzzzz

如果表 1 中的值为空,则不应更新表 2 中的值。

我现在的做法是

UPDATE  Table2 
SET ( col1 ,col2,col3)  
      =  (SELECT NVL(col1 ,col11), NVL(col2,col22), NVL(col3,col33)  
          FROM Test1  
          WHERE ID = ID1 )
4

1 回答 1

1

COALESCE使用暂存值和现有目标值更新每一列,假设列是相同或相似的类型。

这与这个简单的案例没有什么不同NVL,尽管有一些差异值得了解,尤其是可移植性,在更复杂的案例中,还有性能。

虽然每列都在技术上进行更新对您来说似乎很浪费,但事实并非如此。一旦更新数据库行,就会产生成本。您可以使用动态 SQL 进行更复杂的查询,该查询会执行多次更新,每个可能的列组合都更新一次,但该解决方案会非常慢,而且显然更难维护。

于 2012-10-11T20:35:48.680 回答