MERGE for Conditional Upsert

Uses the MERGE statement to perform conditional INSERT, UPDATE, or DELETE operations based on source-target matching for data synchronization.

SqlData Integrity

Code

snippet
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);