我想从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
如果表1中的值为null,则表2中的值不应更新为null。
我现在的做法是
UPDATE Table2
SET ( col1 ,col2,col3)
= (SELECT NVL(col1 ,col11), NVL(col2,col22), NVL(col3,col33)
FROM Test1
WHERE ID = ID1 )
答案 0 :(得分:1)
使用COALESCE
暂存值和现有目标值更新每列,假设列是相同或相似的类型。
在这个简单的情况下,这与NVL
没有区别,尽管有一些differences值得了解,特别是可移植性,在更复杂的情况下,还有性能。
尽管对每个专栏进行技术更新似乎都是浪费,但事实并非如此。更新数据库行后,将产生成本。您可以使用动态SQL进行更复杂的查询,该动态SQL将执行多个更新,每个可能的列组合一个更新,但该解决方案将显着更慢,显然,更难维护。