gpt4 book ai didi

postgresql - 插入包含在同一查询中插入的 ID 的 VALUES 的多行

转载 作者:行者123 更新时间:2023-11-29 11:59:35 24 4
gpt4 key购买 nike

INSERT INTO "public"."Contacts"
(FirstName, LastName, AddressId)
VALUES
('John', 'Doe',
(INSERT INTO "public"."Addresses" (streetName) VALUES ('1st') RETURNING id)
),
('Jane', 'Doe',
(INSERT INTO "public"."Addresses" (streetName) VALUES ('2nd') RETURNING id)
)

我正在寻找一种在 VALUES 中使用多行插入显式值并使返回的 ID 成为这些值的一部分的方法。目前就查询而言,它不起作用,但如果它起作用,它将为每个地址创建一个单独的 INSERT

我知道我需要首先再次使用多个 VALUES 插入所有地址,然后以某种方式将该 ID 数组与 VALUES 一起用于 Contacts,但我不知道如何。谁能指点一下?

最佳答案

如果您插入的街道名称是唯一的,您可以这样做:

with new_data (firstname, lastname, streetname) as (
values
('John', 'Doe', '1st'),
('Jane', 'Doe', '2nd')
)
, new_addresses as (
insert into addresses (streetname)
select streetname
from new_data
returning id, streetname
)
insert into contacts (firstname, lastname, addressid)
select t.firstname,
t.lastname,
a.id
from new_data t
join new_addresses a on a.streetname = t.streetname;

再说一次:如果要插入的街道名称是唯一的(它们在 addresses 表中不需要是唯一的),则此 可以正常工作。

如果您不能保证这一点,我不知道您如何通过单个批量插入来做到这一点。


请注意,我使用的表名与您在问题中使用的表名不同 - 我只是讨厌那些带引号的标识符

关于postgresql - 插入包含在同一查询中插入的 ID 的 VALUES 的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34674817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com