将数据从一列插入/更新到另一列,并进行冲突更新,只有那些特定字段具有不同值的列吗?

问题描述 投票:0回答:1

我有两列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我想知道如何解决这个问题?

sql postgresql select sql-update sql-insert
1个回答
0
投票

问题出在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;
© www.soinside.com 2019 - 2024. All rights reserved.