如何结合这两个Postgresql查询?

时间:2019-03-20 11:14:02

标签: sql postgresql

我想插入第一个表,然后在最终返回插入结果之前,使用返回的(由数据库生成的)插入行的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>;

这两个查询都可以工作,但是我不知道如何将它们串在一起并返回第一个查询的输出。

是否可以执行此操作?还是只运行两个查询会更好?

1 个答案:

答案 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 <>小提琴,说明了该语法有效。