我正在尝试将INSERT INTO SELECT语法与ON CONFLICT方法结合起来以实现UPSERT,但是当我尝试声明ON CONFLICT时出现错误。由于我插入的值来自不同的表,因此我添加了奖励,我首先进行了CTE以使所有JOIN不在实际的UPSERT查询中。这是我写的:
WITH upd (a,b,c) AS (
SELECT id_object, field1, table2.id_table2
FROM table1
LEFT JOIN table2 ON table2.field2=table1.field1)
INSERT INTO new_table(id_new, field1, id_table2)
SELECT a,b,c
FROM upd
ON CONFLICT (id_new) DO UPDATE
SET field1=excluded.b, id_table2=excluded.c
;
使用此查询,我收到一个错误,即排除的列不存在。
出于测试目的,这是一个数据示例:
CREATE TABLE
table2 (id_table2 int PRIMARY KEY,
field2 varchar(10));
CREATE TABLE
table1 (id_object int PRIMARY KEY,
field1 varchar(10),
id_table2 int REFERENCES table2(id_table2));
CREATE TABLE
new_table (id_new int PRIMARY KEY,
field1 varchar (10),
id_table2 int REFERENCES table2(id_table2));
INSERT INTO table2 VALUES (1,'text1');
INSERT INTO table2 VALUES (2,'text2');
INSERT INTO table1 VALUES (1,'text1',1);
INSERT INTO table1 VALUES (2,'text1',1);
INSERT INTO table1 VALUES (3,'text2',2);
有人能指出我的查询中出现了什么问题吗? 感谢