我使用 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);
Run Code Online (Sandbox Code Playgroud)
(当然,实际值会被替换)。
如果我替换affiliate_code = COALESCE(affiliate_code, value3)为affiliate_code = value3,一切正常,但不是我想要的方式。
我怎样才能使这项工作?
这是我的表的定义方式:
CREATE TABLE accounts (
id VARCHAR NOT NULL UNIQUE,
token VARCHAR NOT NULL,
affiliate_code VARCHAR
);
Run Code Online (Sandbox Code Playgroud) 我有这张表:
CREATE TABLE accounts (
id BIGINT NOT NULL UNIQUE,
balance INTEGER DEFAULT 0
);
Run Code Online (Sandbox Code Playgroud)
我需要在将行插入 2 个不同的表后更新每个用户的余额,transfers并且deposits.
我创建了 2 个函数来计算新用户余额并更新它:
/* function for getting user balance */
CREATE FUNCTION get_balance(bigint) RETURNS bigint
AS 'SELECT (
SELECT COALESCE(sum(CASE WHEN won THEN amount * (multiplier - 1) ELSE -amount END), 0)
FROM transfers
WHERE user_id = $1
) + (
SELECT COALESCE(sum(amount), 0)
FROM deposits
WHERE user_id = $1
) as sum;'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL …Run Code Online (Sandbox Code Playgroud)