我正在使用CONFLICT编写向上查询。但是我在更新部分面临问题。这是我的查询样子。
INSERT INTO
customers (name, email, city)
SELECT
'jack',
'jack@io' as email,
city
FROM
customers
where
id = 1
ON CONFLICT(name) DO
update
set
email = cs.email
FROM
(
select
email
from
customers
where
id = 1
)
as cs;
以下是查询结构
CREATE TABLE customers (
id serial PRIMARY KEY,
name VARCHAR UNIQUE,
email VARCHAR NOT NULL,
city VARCHAR NOT NULL
);
我收到了错误消息
syntax error at or near "FROM"
LINE 1: ... ON CONFLICT(name) DO update set email = cs.email FROM (sele...
答案 0 :(得分:2)
您的子选择结构错误。
如果您需要更新多列,请使用元组分配
INSERT INTOcustomers (name, email, city)
SELECT 'jack',
'jack@io' as email,
city
FROM customers
where id = 1
ON CONFLICT(name) DO
update set (email, other_col) = (select email, c2
from customers
where id = 1)