読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

Merge

Mergeを使うと、

  • 複数のテーブルを比較して、
    • マッチする行があれば、更新
    • 行がなければ挿入

といった操作ができます。

以下は、

  • テーブル「test」と「test2」を比較して(カラムのラインナップは同じ)
    • テーブル「test」と「test2」と同じ「name」を持つ行があれば、「test2」の「value」を「test」の「value」と同期
    • テーブル「test」と「test2」と同じ「name」を持つ行がなければ、「test2」に同じ「name」「value」を持つ行を挿入

するサンプルです。

MERGE INTO test2 AS target                  -- 更新するテーブル
  USING test AS src ON src.name=target.name -- 比較元のテーブルと結合条件
WHEN MATCHED THEN 
  UPDATE SET value = src.value              -- 対応する行があった場合の操作
WHEN NOT MATCHED THEN 
  INSERT (name,value) VALUES (src.name, src.value)  -- 対応する行がない場合の操作

実行結果は次の通り。まずは、挿入前のテーブル。

$ db2 "select * from test"

ID                   NAME                 VALUE               
-------------------- -------------------- --------------------
                   7 a                    aaa                 
                   8 b                    bbb                 

  2 record(s) selected.

$ db2 "select * from test2"

ID                   NAME                 VALUE               
-------------------- -------------------- --------------------
                  10 c                    ccc                 
                   9 b                    xxx                 

  2 record(s) selected.


マージ実行。

$ db2 "MERGE INTO test2 AS target USING test AS src ON src.name=target.name  WHEN MATCHED THEN UPDATE SET value = src.value WHEN NOT MATCHED THEN INSERT (name,value) VALUES (src.name, src.value)"
DB20000I  The SQL command completed successfully.

実行結果です。

$ db2 "select * from test"

ID                   NAME                 VALUE               
-------------------- -------------------- --------------------
                   7 a                    aaa                 
                   8 b                    bbb                 

  2 record(s) selected.

$ db2 "select * from test2"

ID                   NAME                 VALUE               
-------------------- -------------------- --------------------
                  10 c                    ccc                 
                  11 a                    aaa                 
                   9 b                    bbb                 

  3 record(s) selected.