如何从postgres函数返回两个SELECT语句的结果?

时间:2019-04-14 14:21:55

标签: sql postgresql

我有这个postgresql函数:

CREATE OR REPLACE FUNCTION public.test_q1()
 RETURNS TABLE(schemaname text)
 LANGUAGE plpgsql
AS $function$
BEGIN
   return Query (select "content" from public.post where id='863550630468626253');
  -- return Query (select count(*) from public.comments WHERE post_id='863550630468626253');
END
$function$
;

如何从该函数返回两个选择语句的结果?

是否可以从函数中返回两个select语句的结果集,这样当我调用public.test_q1时它将返回两个值,第一个结果集将是content的值,而另一个第一个Select和第二个返回值中的列将是计数?

1 个答案:

答案 0 :(得分:1)

在一个查询中返回两个值?

 select p."content",
        (select count(*)
         from public.comments c
         where c.post_id = '863550630468626253'
        ) as num_comments
 from public.post p
where p.id = '863550630468626253'
            );

编辑:

我认为您不能保证函数的返回集中结果的顺序,但是您可以使用union all返回这两个值。大概content不是数字。因此,一种方法是强制转换值:

 select p."content"
 from public.post p
 where p.id = '863550630468626253'
 union all
 select count(*)::text
 from public.comments c
 where c.post_id = '863550630468626253';

我相信实际上这将首先返回内容,然后返回计数。但是,我认为Postgres不能保证订购。