在 PostgreSQL 中,可以将 RETURNING
放在 INSERT
语句的末尾以返回,比如说,当行的主键值自动设置时SERIAL
类型。
如何将此值存储在可用于将值插入其他表的变量中?
请注意,我想将生成的 id
插入到多个表中。据我所知,WITH
子句仅对单个插入有用。我认为这可能必须在 PHP 中完成。
这确实是糟糕设计的结果;没有自然键,除非您掌握了主键,否则很难获取唯一的行;
最佳答案
... that can be used to insert values into other tables?
您甚至可以使用 data-modifying 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;
关于sql - 存储和重用 INSERT ... RETURNING 返回的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18169734/