1

masterTable (id, description, list_price) と changesTable (id, description, list_price) という同じ構造の 2 つのテーブルがあります。

changesTable の変更を masterTable にマージしたいが、changesTable で NULL の場合に masterTable の 'description' を更新したくない、古い値を保持したい

私はこれをやろうとしました

WHEN MATCHED THEN
UPDATE SET master.list_price=changes.list_price,
master.description=ch.description   
WHERE length(changes.description)>0

ただし、この場合、list_price も更新されません。

それらを適切にマージするにはどうすればよいですか?ありがとう

問題の説明は次のとおりです。単一のマージ ステートメントを使用して、upd_services テーブルをテーブル upd_services_changes_2 のデータで更新します。このマージには、更新、削除、および挿入が含まれます。このタスクでは、削除は変更テーブルのマイナスの価格で示されます。変更テーブルの説明フィールドが null の場合は、更新時にサービス テーブルの説明を変更しないでください。定価が 0 以上の場合にのみ、挿入を行います。

4

2 に答える 2

1
WHEN MATCHED THEN
UPDATE SET master.list_price=changes.list_price,
master.description=ch.description   
WHERE length(changes.description)>0

これは、length(changes.description)> 0の場合にのみ更新されますが、「常にlist_priceを更新しますが、長さがゼロの場合にのみリストの説明を更新します」のように言うつもりです。これは2つのマージで実行できます。

WHEN MATCHED THEN
UPDATE SET master.list_price=changes.list_price

WHEN MATCHED THEN
UPDATE SET 
master.description=ch.description   
WHERE length(changes.description)>0

または、SQLダイアレクト構文をチェックして、2つの条件を指定する方法を確認してください。

ヒント:これを行う方法はありますが、WHEREステートメントを使用する方法はありません。CASEを使用する必要があります。それを試してみて、さらに質問がある場合は後で戻ってきてください。

于 2012-04-15T18:58:17.173 に答える
1

あなたはこれを試すことができます


WHEN MATCHED THEN
UPDATE SET master.list_price=changes.list_price,
master.description = DECODE(ch.description ,
                             NULL,
                             master.description,
                             ch.description )

この場合、ch.description が null の場合、元の値が保持されます (つまり、master.description)。そうでない場合、ch.description は master.description で上書きされます。

それが役に立てば幸い

于 2012-04-16T05:49:27.757 に答える