10

在 PostgreSQL 中,可以放在语句RETURNING的末尾INSERT以返回,例如,当该值由SERIAL类型自动设置时,该行的主键值。

问题:

如何将此值存储在可用于将值插入其他表的变量中?请注意,我想将生成的插入id到多个表中。据我了解,WITH子句仅对单个插入有用。我认为这可能必须在 PHP 中完成。

这确实是糟糕设计的结果;没有自然键,除非您有主键句柄,否则很难获取唯一行;

4

1 回答 1

24

...可用于将值插入其他表?

您甚至可以使用数据修改 CTE在单个 SQL 语句中执行此操作:

WITH ins1 AS (
   INSERT INTO tbl1(txt)
   VALUES ('foo')
   RETURNING tbl1_id
   )
INSERT INTO tbl2(tbl1_id)
SELECT * FROM ins1

需要 PostgreSQL 9.1 或更高版本。

db<>fiddle here (Postgres 13)
sqlfiddle (Postgres 9.6)

回复问题更新

您还可以在单​​个查询中插入多个表:

WITH ins1 AS (
   INSERT INTO tbl1(txt)
   VALUES ('bar')
   RETURNING tbl1_id
   )
 , ins2 AS (
   INSERT INTO tbl2(tbl1_id)
   SELECT tbl1_id FROM ins1
   )
INSERT INTO tbl3(tbl1_id)
SELECT tbl1_id FROM ins1;
于 2013-03-26T01:47:35.783 回答