0

少し考えた後、これを完全に再編集しました。本来は別の MERGE ステートメントと結合することを望んでいましたが、それを忘れてください。明確にするために、これはアップサートではありません。既存の一致するレコードが見つからない場合、新しいレコードを追加したい。

mytablefoobar、 を保持しているとしましょうbaz。Where (パフォーマンスに関連する場合)foobar一緒にレコードを一意に識別します。

a) そうでない場合はfoo、, ,barを挿入します。foobarbaz

b) それ以外の場合foo、 and barbutbaz<new>が等しくない場合は、, をbaz<old>挿入します。foobarbaz<new>

c) 3 つすべてが一致する場合は、何もしません。

b同様に、更新ではなく新しいレコードであることに注意してください。基本的に、これは への変更を記録するログbazです。

追加のボーナスとして、マージをmy_second_table試みるだけの MERGE ステートメント ( to ) を取得できれば素晴らしいと思います。ケースの意味は変更されないため、他のテーブルに触れる必要はありません。しかし、私はあなたがすべてを持つことができないことを知っています.abcbaz

Mongo のように JavaScript を使えないのはなぜですか?

4

1 に答える 1

0

マージ ステートメントで 2 つのテーブルを更新する方法はありませんが、いくつかの代替手段があります。1 つは、最初のテーブルにトリガーを追加することです。トリガーは、必要な変更で起動し、2 番目のテーブルに行を挿入できます。

CREATE TRIGGER IUA_Table1
AFTER INSERT OR UPDATE
ON Table1 FOR EACH ROW
BEGIN

  INSERT INTO LogTable(groupid, var, sku_no )
  VALUES(:new.groupid, var, sku_no);

END;

このトリガーは、merge ステートメントだけでなく、挿入または更新時に発生します。

トリガーが好きでほとんど何にでも使う人もいれば、何にでも使いたがらない人もいることに注意してください。個人的には、トリガーにビジネス ロジックを入れすぎてはいけないと思いますが、このような変更をログに記録する場合は許容できるかもしれません。

于 2015-05-31T17:30:39.290 に答える