2012-10-11 84 views
2

我想从Table1表中更新Table2表中的多个列。登台表可能有空值。我只想更新Table1表中有值的数据 - 不是NULL值。使用临时表更新多列避免临时表中的空值

请指点

e.g

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 

它不应该更新表2的值,如果表1中值为null将空。

我的做法,现在是

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

回答

1

更新与升级价值的COALESCE每一列和现有的目标值,假设列是相同或相似的类型。

在这种简单的情况下,这与NVL没有什么不同,尽管有一些differences值得了解,尤其是便携性,在更复杂的情况下,性能。

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