【问题标题】:Updating Multiple Column with Staging table avoiding Null Values in Staging Table使用暂存表更新多列避免暂存表中的空值
【发布时间】:2012-10-11 20:25:58
【问题描述】:

我想从 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 )

【问题讨论】:

    标签: sql oracle sql-update


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-11-15
      • 2018-10-04
      • 2016-02-10
      • 2021-12-25
      • 1970-01-01
      • 2016-10-01
      • 2019-06-14
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多