Apa itu Merge Update (Upsert) ?

Merge Update/Upsert adalah perintah standard SQL untuk melakukan INSERT record baru kalau kondisi tidak memenuhi, atau UPDATE/DELETE existing record kalau kondisinya memenuhi.

Dengan kata lain Merge Update/Upsert ini adalah satu perintah SQL yang menggabungkan INSERT, UPDATE, DELETE dalam satu perintah.

Perintah ini menyelesaikan permasalahan umum di dunia Software Engineering yang biasanya membutuhkan kasus yang serupa, yaitu :

  • INSERT data jika belum ada, UPDATE data jika sudah ada.

Standard SQL ini dimasukkan dalam standar ANSI SQL:2003 dan disempurnakan di ANSI SQL:2008

Sering dinamakan UPSERT (UPdate inSERT), karena dianggap mewakili perintah INSERT dan UPDATE secara bersamaan.

Apakah semua versi database mengakomodasi ini ?

Tentu saja tidak, walaupun sudah dimasukkan dalam standar ANSI SQL:2003, namun tidak semua relational database mengakomodasinya.

Walaupun beberapa database tidak mengakomodasinya, tapi mereka mempunyai perintah khusus yang mirip dengan standard MERGE INTO …

Berikut datar database yang mengakomodasinya baik yang mengikuti standar atau mempunyai perintah yang mirip :

Database Disupport sejak Versi Perintah
Oracle Oracle 9i MERGE INTO …
SQL Server SQL Server 2008 MERGE INTO …
PostgreSQL PostgreSQL 9.5 INSERT … ON CONFLICT … DO UPDATE SET …
MySQL MySQL 5.6 INSERT … ON DUPLICATE KEY REPLACE …



Bagaimana perintahnya



Oracle


MERGE <table_tujuan>
  USING <table_sumber>
  ON <kondisi>
WHEN MATCHED THEN
  UPDATE
  SET <kolom1> = <nilai1 [, kolom2 = nilai2...]>
WHEN NOT MATCHED THEN
  INSERT <(kolom1 [,kolom2...]>
  VALUES <(nilai1 [,nilai2...])>
WHEN SOURCE NOT MATCHED THEN DELETE;


PostgreSQL


INSERT INTO <table_tujuan>
ON CONFLICT <kondisi>
DO UPDATE set
SET <kolom1> = <nilai1 [, kolom2 = nilai2...]>