MERGE (SQL)
アップサートと削除を一度に行うSQL標準のコマンド。MERGE INTO target USING source ON ... WHEN MATCHED THEN UPDATE ... WHEN NOT MATCHED THEN INSERT。SQL:2003で標準化され、PostgreSQL 15以降(2022年)、Oracle、SQL Server、MySQL 8以降で使える。
用途は、外部ソース(CSVインポートやレプリケーションのバッチ)から大規模なデータセットを同期することだ。INSERT、UPDATE、DELETEのループを分けて書く代わりに、1文で済む。WHEN NOT MATCHED BY SOURCEで、ターゲットにあってソースにない行(削除、または陳腐化の印付け)を扱える。PostgreSQLのINSERT ... ON CONFLICTとの比較では、MERGEは削除にも対応できて柔軟であり、ON CONFLICTは純粋なアップサートならより単純である。性能面ではMERGEはバッチ処理に最適化されており、並列化も使える。古典的な用途はデータウェアハウスのETLである。