我正在尝试一种可重现的方式来使用一些测试数据填充数据库。
假设(一个过于简化的示例)三个基本表:name、city、job 和两个关系表:name-city 和 name-job。我需要在三个基表中的每一个中创建一个条目,并使用上述条目在两个关系表中创建条目。
我已经拥有的是一种使用一系列with
查询在 3 个基表中创建条目并将值插入到 ONE 关系表中的方法。
with x as
(INSERT INTO "public"."name" VALUES(DEFAULT) RETURNING "id"),
y as
(INSERT INTO "public"."job" VALUES(DEFAULT) RETURNING "id"),
z as
(INSERT INTO "public"."city" VALUES(DEFAULT) RETURNING "id")
INSERT INTO "public"."name-job"("name", "job")
select x.id, y.id from x,y;
我真的很想添加第二个插入语句
INSERT INTO "public"."name-city"("name", "city")
select x.id, z.id from x,z;
在第一次插入后,但不知道如何。我尝试用逗号分隔两个插入语句,并将它们括在括号中,然后用逗号分隔它们,以及其他一些方法,但没有任何效果。
在第二个插入中使用全新的语句并不完全是一种选择,因为我需要使用相同的 x、y、z 值。鉴于我缺乏专业知识/经验,我完全有可能遗漏了一些明显的东西......所以任何关于我如何做到这一点的想法,理想情况下,没有高度复杂的工具,将是最受欢迎的。
FWIW,我正在使用 Postgres (10.x)
您需要将其
INSERT INTO "name-job"
放入另一个 CTE。您也可以将最后一个插入插入"name-city"
到 CTE 中,并添加 aSELECT
以获取所有插入的 id(以及插入行中您需要的任何其他内容)。