【问题标题】:Referencing inserted ID in multiple insert transactions in Postgres在 Postgres 的多个插入事务中引用插入的 ID
【发布时间】:2019-05-31 09:43:44
【问题描述】:
我需要构建一个 SQL 查询,该查询必须能够在第一个表中插入数据,获取插入的 ID,然后将其用作下表中的外键。
WITH inserted AS (
INSERT INTO firstTable (name) VALUES ('somename') RETURNING id
)
SELECT * FROM inserted; -- this has the inserted id
INSERT INTO secondTable (name, foreign_id) VALUES ('someexternalname', ???)
那么如何在secondTable 插入中引用id 中的inserted?
【问题讨论】:
标签:
sql
postgresql
transactions
foreign-keys
relational-database
【解决方案1】:
你已经完成了这百分之八十,完整的 SQL 是:
with inserted as (
insert into first_table(name) values ('somename') returning id
)
insert into second_table(name, foreign_id) select 'someexternalname',id from inserted
【解决方案2】:
你可以这样做:
WITH inserted AS (
INSERT INTO firstTable (name) VALUES ('somename') RETURNING id
)
INSERT INTO secondTable (name, foreign_id)
SELECT
'someexternalname',
id
FROM inserted;
【解决方案3】:
你可以试试这个:
INSERT INTO secondTable (name, foreign_id) VALUES ('someexternalname', (SELECT
MAX (id) FROM firstTable))