EXCEPT
- это оператор на основе множеств, например UNION
, UNION ALL
и INTERSECT
, который соединяет наборы результатов, сгенерированные с помощью SELECT
. Это не имеет смысла с UPDATE
.
Но его легко заменить, используя NOT EXISTS
:
with u as (
UPDATE daily_item_sales
SET sales_amt = jd.sales_amt,
sales_qty = jd.sales_qty,
sales_prc=jd.sales_prc,
sales_promo_amt = jd.sales_promo_amt,
sales_promo_qty = jd.sales_promo_qty,
discount_amt = jd.discount_amt,
discount_qty = jd.discount_qty,
coupon_amt = jd.coupon_amt,
coupon_qty = jd.coupon_qty,
price_override_amt = jd.price_override_amt,
price_override_qty = jd.price_override_qty,
return_amt = jd.return_amt,
return_qty = jd.return_qty,
item_scanned = jd.item_scanned,
item_keyed = jd.item_keyed
FROM updated_Item_data jd
WHERE daily_item_sales.id = jd.id AND
NOT EXISTS (SELECT 1
FROM daily_item_sales dis
WHERE dis.id = jd.id AND
dis.sales_amt = jd.sales_amt AND
dis.sales_qty = jd.sales_qty AND
dis.sales_promo_amt = jd.sales_promo_amt AND
dis.sales_promo_qty = jd.sales_promo_qty AND
dis.discount_amt = jd.discount_amt AND
dis.discount_qty = jd.discount_qty AND
dis.coupon_amt = jd.coupon_amt AND
dis.coupon_qty = jd.coupon_qty AND
dis.price_override_amt = jd.price_override_amt AND
dis.price_override_qty = jd.price_override_qty AND
dis.return_amt = jd.return_amt AND
dis.return_qty = jd.return_qty AND
dis.item_scanned = jd.item_scanned AND
dis.item_keyed = jd.item_keyed
)
. . .
Тем не менее, это, вероятно, лучше обрабатывать, используя ON CONFLICT
с уникальное ограничение.