2

Table1 テーブルから Table2 テーブルの複数の列を更新したい。ステージング テーブルには null 値が含まれる場合があります。NULL 値ではなく、Table1 テーブルに値を持つデータを更新したいだけです。

ご意見をお聞かせください

例えば

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 の値を更新しないでください。

今の私のアプローチは

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を使用して、可能な列の組み合わせごとに1つずつ、複数の更新を行うはるかに複雑なクエリを作成できますが、そのソリューションは劇的に遅くなり、明らかに保守が難しくなります。

于 2012-10-11T20:35:48.680 に答える