将元素上载到表中时,“列引用不明确”


16

我正在使用PostgreSQL作为数据库。我需要在数据库中创建一个条目,如果该条目已经存在,则只需更新其字段即可,但是只有未设置该字段时,才应更新其中一个字段。

我已经从这个问题中使用过信息:https : //stackoverflow.com/questions/13305878/dont-update-column-if-update-value-is-null,它与我所拥有的很相关。

我尝试使用此查询,但是当我运行它时,它出现以下错误Column reference 'affiliate_code' is ambiguous

INSERT INTO accounts (id, token, affiliate_code)
VALUES (value1, value2, value3)
ON CONFLICT (id) DO
UPDATE SET token = value2,
  affiliate_code = COALESCE(affiliate_code, value3);

(当然,实际值将被替换)。

如果我替换affiliate_code = COALESCE(affiliate_code, value3)affiliate_code = value3,则一切正常,但并非以我希望的方式运行。

我该如何工作?

这是我的表格的定义方式:

CREATE TABLE accounts (
  id VARCHAR NOT NULL UNIQUE,
  token VARCHAR NOT NULL,
  affiliate_code VARCHAR
);

4
尝试= COALESCE(accounts.affiliate_code, EXCLUDED.affiliate_code)
ypercubeᵀᴹ

Answers:


16

从文档中

flict_action指定了另一种ON CONFLICT动作。它可以是DO NOTHING,也可以是DO UPDATE子句,用于指定发生冲突时要执行的UPDATE操作的确切详细信息。ON CONFLICT DO UPDATE中的SET和WHERE子句可以使用表名(或别名)访问现有行,并使用特殊的排除表访问建议插入的行。在目标表中读取相应的排除列的任何列上都需要SELECT特权。

因此,请尝试每个ypercubeᵀᴹ

INSERT INTO accounts (id, token, affiliate_code)
VALUES (value1, value2, value3)
ON CONFLICT (id) DO
UPDATE SET token = value2,
  affiliate_code = COALESCE(accounts.affiliate_code, excluded.affiliate_code);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.