首页 > 解决方案 > Postgres函数返回Select *来自多个表的结果

问题描述

我需要"select * from table1 t1 join table2 t2 on t1.id = t2.t2id where t1.id = _id"使用函数 get_data(_id) 返回。

我找到了解决方案:https ://stackoverflow.com/a/11751557 但是一个表有结果,我不明白是否可以将连接添加到该查询以从多个表中获取结果?

我试过了:

CREATE OR REPLACE FUNCTION get_data_test_2(_tbl_type anyelement,_tbl_type_2 anyelement, _id int)
  RETURNS SETOF anyelement
  LANGUAGE plpgsql AS
$func$
BEGIN
   RETURN QUERY EXECUTE format('
      SELECT *
      FROM  %s as s1  -- pg_typeof returns regtype, quoted automatically
      left join %s as s2 on s1.id = s2.t1id
      WHERE  id = s1.'||_id||''
    , pg_typeof(_tbl_type))
   USING  _id;
END
$func$;

但显然它不起作用 UPD 主要问题是我需要动态地从连接表中获取所有列而不设置显式列名。

标签: postgresqlpostgresql-11

解决方案


你可以试试这个:

CREATE OR REPLACE FUNCTION get_data_test_2(_tbl_type anyelement,_tbl_type_2 anyelement, _id int)
  RETURNS SETOF record
  LANGUAGE plpgsql AS
$func$
BEGIN
   RETURN QUERY EXECUTE format('
      SELECT *
      FROM  %s as s1
      left join %s as s2 on s1.id = s2.t1id
      WHERE  id = s1.'||_id
    , pg_typeof(_tbl_type)
    , pg_typeof(_tb2_type))
   USING  _id;
END
$func$;

推荐阅读