MERGE for Conditional Upsert
Uses the MERGE statement to perform conditional INSERT, UPDATE, or DELETE operations based on source-target matching for data synchronization.
Code
MERGE INTO products AS target
USING product_updates AS source
ON target.product_id = source.product_id
WHEN MATCHED AND source.action = 'update' THEN
UPDATE SET
product_name = source.product_name,
unit_price = source.unit_price,
stock_quantity = source.stock_quantity,
updated_at = CURRENT_TIMESTAMP
WHEN MATCHED AND source.action = 'price_only' THEN
UPDATE SET
unit_price = source.unit_price,
updated_at = CURRENT_TIMESTAMP
WHEN MATCHED AND source.action = 'delete' THEN
DELETE
WHEN NOT MATCHED AND source.action = 'insert' THEN
INSERT (product_id, product_name, unit_price, stock_quantity, category_id)
VALUES (source.product_id, source.product_name, source.unit_price,
source.stock_quantity, source.category_id)
WHEN NOT MATCHED AND source.action = 'skip' THEN
DO NOTHING;
-- MERGE for daily sales aggregation sync
MERGE INTO daily_sales_summary AS target
USING (
SELECT
DATE(order_date) AS sale_date,
SUM(total_amount) AS daily_total,
COUNT(*) AS order_count
FROM orders
WHERE order_date >= CURRENT_DATE - 1
GROUP BY DATE(order_date)
) AS source
ON target.sale_date = source.sale_date
WHEN MATCHED THEN
UPDATE SET
daily_total = source.daily_total,
order_count = source.order_count,
updated_at = CURRENT_TIMESTAMP
WHEN NOT MATCHED THEN
INSERT (sale_date, daily_total, order_count, created_at)
VALUES (source.sale_date, source.daily_total, source.order_count,
CURRENT_TIMESTAMP);Report a problem with this exampleOpens a pre-filled issue on GitHub.