如何嵌套“插入...返回”?

时间:2018-11-02 15:53:29

标签: postgresql sql-insert

Postgresql可以使用returning返回自动递增的值:

insert into table1 (id) values (null) returning id;

我试图将返回值插入另一个表:

insert into table2 (id) values ((insert into table1 (id) values (null) returning id)) returning id;

但这会在嵌套into中的insert之前引发语法错误。

如何使用内部insert的返回值作为外部insert的值?

1 个答案:

答案 0 :(得分:5)

您可以链接data modifying CTEs

with new_t1 as (
  insert into table1 (id) values (default) 
  returning id
)
insert into table2 (id) 
select id 
from new_t1;

请注意,当您明确要求将insert into table1 (id) values (null) returning id插入该列时,null将返回NULL

要确保生成一个值,您需要告诉Postgres使用该列的默认值,而不是NULL值。