我有一个PostgreSQL函数,返回table1
和id
的{{1}}的所有列。我不希望为每个字段键入新的返回类型(如table2
示例中的here所示),因为此表中有九列,而我将这样做多次针对不同的类似查询。 (查询是RETURNS TABLE
。)
我想做类似的事情:
INNER JOIN
是否有一种简单的方法可以使用表名称/类型来完成此操作,还是必须键入每列并再次键入?
答案 0 :(得分:2)
您可以通过定义函数返回类型来轻松实现这一点:
RETURNS TABLE (
t1 schema.table1,
t2_id bigint
)
然后,您将在结果集中仅获得两列,但第一列是与table1
对应的复合类型,您可以按以下方式访问其成员:
SELECT (t1).*, t2_id FROM func();
答案 1 :(得分:0)
您可以使用table inheritance:
postgres=# create table t1(a int, b int);
CREATE TABLE
postgres=# create table t2(c int) inherits(t1);
CREATE TABLE
postgres=# \d t2
Table "public.t2"
+--------+---------+-----------+----------+---------+
| Column | Type | Collation | Nullable | Default |
+--------+---------+-----------+----------+---------+
| a | integer | | | |
| b | integer | | | |
| c | integer | | | |
+--------+---------+-----------+----------+---------+
Inherits: t1