更新型のテーブル(例えば、各種マスタやユーザ情報を保存してあるテーブル)を分析用のデータベースに保存する場合、多くはテーブルを作り直したり、データを丸ごと入れ直したりすることで最新の状態を保つが、テーブルのサイズが極端に大きく、かつ設定された更新頻度での差分がそんなにない場合は「MERGE」を使用して、存在しない行または、更新がかかった行のみ取り込むことで、差分のみ更新するほうが効率的な場合がある。
以下は基本の構文。公式ドキュメントはこちら
--base_tableをもとにtarget_tableを差分更新する
MERGE INTO target_table AS a
USING (SELECT columnA,
columnB,
columnC from base_table) AS b
--マッチしているかの判定条件
ON (a.columnA = b.columnA)
--マッチしている行の処理(UPDATE)
WHEN MATCHED THEN
UPDATE SET columnA = b.columnA,
columnB = b.columnB,
columnC = b.columnC
--マッチしていない行の処理(INSERT)
WHEN NOT MATCHED THEN
INSERT (columnA,
columnB,
columnC)
VALUES (b.columnA,
b.columnB,
b.columnC)