我想插入第一个表,然后在最终返回插入结果之前,使用返回的(由数据库生成的)插入行的UUID更新第二个表。
插入查询如下:
INSERT INTO public.organisations ("name")
VALUES('StackOverflow')
RETURNING *
这将返回包含名称,数据和ID的行。数据是一个空JSON,可以忽略,id是下面使用的UUID。
更新查询如下所示:<orgId>
表示由上述插入生成并返回的UUID,而<userId>
表示从代码传入的值:
UPDATE public.users
SET id_organisation = <orgID>, last_modified_by = <userID>
WHERE id = <userID>;
这两个查询都可以工作,但是我不知道如何将它们串在一起并返回第一个查询的输出。
是否可以执行此操作?还是只运行两个查询会更好?
答案 0 :(得分:1)
使用CTE:
with i as (
INSERT INTO public.organisations ("name")
VALUES('StackOverflow')
RETURNING *
)
UPDATE public.users
SET id_organisation = (SELECT i.id FROM i LIMIT 1), last_modified_by = <userID>
WHERE id=<userID>;
请注意,它使用带有LIMIT
的子查询-这样可以保证最多返回一行。
Here是一个db <>小提琴,说明了该语法有效。