Function 函数返回多个表中的所有列(PostgreSQL)

Function 函数返回多个表中的所有列(PostgreSQL),function,postgresql,join,return,multiple-tables,Function,Postgresql,Join,Return,Multiple Tables,我想创建一个函数,返回函数查询中连接的两个表中的所有列。若这只是一个表,那个么我可以简单地使用表的名称来定义返回类型。对于更多的表,我知道的唯一方法是分别定义每个列,当表中有很多列时,这会变得有点复杂。有没有更简单的方法呢?没有专门的功能 您可以列出子句中的所有列: 或者创建一个类型并使用返回集合.. CREATE TAPE mytype (col1 type1, col2 type2, ...); ... RETURNS SETOF mytype ... 您可以创建视图并将其用作类型: C

我想创建一个函数,返回函数查询中连接的两个表中的所有列。若这只是一个表,那个么我可以简单地使用表的名称来定义返回类型。对于更多的表,我知道的唯一方法是分别定义每个列,当表中有很多列时,这会变得有点复杂。有没有更简单的方法呢?

没有专门的功能

您可以列出子句中的所有列:

或者创建一个
类型
并使用
返回集合..

CREATE TAPE mytype (col1 type1, col2 type2, ...);

...
RETURNS SETOF mytype
...

您可以创建视图并将其用作类型:

CREATE VIEW viewname AS select * from table1, table2, table3;
那么这个函数声明将起作用:

CREATE FUNCTION multiple_tables(...) RETURNS SETOF viewname AS
$$
  return select * from table1 join table2 on (...) join table3 on (...) WHERE ...;
$$ language sql;
返回视图名
,也可以不使用
设置


该函数将依赖于
viewname
,因此,如果不先删除该函数,就无法在以后对视图进行结构修改。

从CREATE TABLE语句复制列名会稍微长一点。不过,这并不复杂。您可以创建一个复合类型(或使用
返回表
),将复合类型作为字段。访问表列的时间将更长,但您不必复制列(及其类型)+原始表结构中的更改将立即反映出来+这种方式允许重复列名。
CREATE FUNCTION multiple_tables(...) RETURNS SETOF viewname AS
$$
  return select * from table1 join table2 on (...) join table3 on (...) WHERE ...;
$$ language sql;