PostgreSQL 9.5:与CTE冲突更新

时间:2016-11-28 09:00:05

标签: postgresql

我有以下三个表,每个表有两列。

:ct1

create table ct1
(
id int primary key,
name varchar(10)
);

:ct2

create table ct2 
(
id int primary key,
name varchar(10)
);

:ct3

create table ct3
(
id int primary key,
name varchar(10)
);

插入

insert into ct1 values(1,'A');
insert into ct1 values(2,'B');

insert into ct1 values(11,'C');
insert into ct1 values(12,'D');

注意:我想在选项卡表ct3中插入记录,方法是使用CTE(必填)从​​其他两个表中选择数据。

我的尝试:

查询

INSERT INTO ct3(id,name)
WITH CTE 
AS
(
    SELECT id,name from ct1 
    WHERE id is not null
),
cte2
as
(
    SELECT id,name from ct2
    WHERE name is not null
)
select c1.id as id1,c2.name as name1 from cte as c1,cte2 as c2
on conflict (id) do update
set
id = id1,
name = name1;

错误

ERROR:  column "id1" does not exist
LINE 17:  id = id1,

1 个答案:

答案 0 :(得分:0)

插入需要是之后最终查询 CTE

[[0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 ..., 
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]]