我有两列products/tmp_products
,其规格如下(id bigint primary key ,price int not null,quantity int not null ,lastupdate timestamp)
我想要SQL如果产品中没有ID,则从tmp_products插入产品。仅在(价格或数量)值更改时更新。
INSERT INTO products(id,price,quantity,lastupdate)
SELECT (id,price,quantity,lastupdate) FROM tmp_products
ON CONFLICT (id) DO UPDATE SET
price=EXCLUDED.price,
quantity=EXCLUDED.quantity,
lastupdate=EXCLUDED.lastupdate
where price!=EXCLUDED.price or quantity!=EXCLUDED.quantity;
我遇到以下错误column reference "price" is ambiguous
我想知道如何解决这个问题?
问题出在where
子句中。您需要对列进行限定,以便明确:
INSERT INTO products(id,price,quantity,lastupdate)
SELECT id,price,quantity,lastupdate FROM tmp_products
ON CONFLICT (id) DO UPDATE SET
price = EXCLUDED.price,
quantity = EXCLUDED.quantity,
lastupdate = EXCLUDED.lastupdate
WHERE products.price <> EXCLUDED.price OR products.quantity <> EXCLUDED.quantity;