INTO sampleapp_stock AS target USING (VALUES ('A-001', 12 , now()), ( 'B-002', 0 , now()), ( 'C-003', 5 , now()) ) AS source(sku, quantity, seen_at) ON target.sku = source.sku WHEN MATCHED AND source.quantity = 0 THEN DELETE WHEN MATCHED THEN UPDATE SET quantity = source.quantity WHEN NOT MATCHED AND source.quantity > 0 THEN INSERT (sku, quantity, seen_at) VALUES (source.sku, source.quantity, source.seen_at); 結果 MERGE 3 sku | quantity ------+--------- A-001 | 12 C-003 | 5 単純なUPSERTなら ON CONFLICT で十分。条件でDELETEもした い、分岐が複数あるなら MERGE が読みやすい。