-- Created on savesnippets.com ยท https://savesnippets.com/377qcgXm2jf3zv -- 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.