如何将CTE的多个结果插入表中?

时间:2018-02-21 00:21:35

标签: postgresql insert common-table-expression

我正在尝试插入CTE的结果

这是我的两张桌子:

reate table account(
accountid bigint primary key,
customerid bigint not null,
description varchar(50),
foreign key (customerid) references customer(customerid));

create table transaction(
transactionid bigint primary key,
accountid bigint not null,
trantimestamp timestamp not null,
amount numeric(8,2) not null,
foreign key (accountid) references account(accountid));

这是插入CTE结果的插入语句:

insert into transaction (accountid, trantimestamp, amount) 
with accounts as(select accountid, sum(amount)amounts from transaction where accountid in(
select accountid from account where description ='saving' order by accountid) group by accountid order by accountid)
select accountid, now(), (0.01*amounts)/100 from accounts;

我无法在表格中插入多行。 我知道插入了第一行,然后它没有插入,因为更新的第一行中仍然卡住了主键。

我还尝试了函数"返回transactionid" 。但它也没有用。

1 个答案:

答案 0 :(得分:0)

由于transactionid不在插入列的列表中,因此您的语句将隐式尝试将NULL插入此列。这不会起作用,因为主键是自动NOT NULL

如果您希望自动填充列数增加,请将其定义为bigserial。这将设置使用序列生成的DEFAULT