SQL

MERGE — One Statement for INSERT + UPDATE + DELETE

admin by @admin ADMIN
1d ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
`MERGE` (standard SQL, PostgreSQL 15+, SQL Server, Oracle) is a single statement that combines INSERT/UPDATE/DELETE driven by joining a source against a target. Heavy artillery for reconciliation jobs.
SQL
Raw
-- Sync a staging table into the live products table
MERGE INTO products AS p
USING (SELECT sku, name, price FROM products_staging) AS s
   ON p.sku = s.sku
WHEN MATCHED AND (p.name, p.price) IS DISTINCT FROM (s.name, s.price) THEN
    UPDATE SET name = s.name, price = s.price, updated_at = NOW()
WHEN NOT MATCHED THEN
    INSERT (sku, name, price) VALUES (s.sku, s.name, s.price)
WHEN NOT MATCHED BY SOURCE THEN     -- SQL Server / Oracle syntax
    DELETE;

-- PostgreSQL 15+ syntax is slightly simpler:
MERGE INTO products p
USING products_staging s ON p.sku = s.sku
WHEN MATCHED  THEN UPDATE SET name = s.name, price = s.price
WHEN NOT MATCHED THEN INSERT (sku, name, price) VALUES (s.sku, s.name, s.price);

-- Tip: for "just upsert", ON CONFLICT (Postgres) or ON DUPLICATE KEY (MySQL)
-- is usually cleaner. MERGE shines when you need DELETE in the mix too.
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.