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.