使用 PostgreSQL 从许多表中选择并合并相同的属性

Posted

技术标签:

【中文标题】使用 PostgreSQL 从许多表中选择并合并相同的属性【英文标题】:Select and union same attributes from many tables using PostgreSQL 【发布时间】:2020-01-07 15:01:19 【问题描述】:

我正在尝试编写一个更高效的 PostgreSQL 查询,它将跨多个表的类似属性联合在一起。背景是数据库为不同评估的结果提供了单独的表格,我正在尝试查看所有评估的结果。目前,例如,我有一个存储所有评估表名称的表:

| tables  |
|---------|
| table_a |
| table_b |
| table_c |

我正在使用此查询将结果汇总在一起(实际上,我正在汇总超过 25 个不同的表):

SELECT person_id, subject_id, outcome
FROM table_a
UNION ALL
SELECT person_id, subject_id, outcome
FROM table_b
UNION ALL
SELECT person_id, subject_id, outcome
FROM table_c

是否有一种 PostgreSQL 方法可以在多个表中循环使用相同的 SELECT 语句,然后将 UNION ALL 结果放在一起(例如,这样我就不必重复 sn-p 超过 25 次)?

【问题讨论】:

【参考方案1】:

您应该编写为您生成语句的代码。您可以做的一件事是编写一个 PL/pgSQL 函数:

CREATE FUNCTION get_them()
RETURNS TABLE (
   person_id bigint,
   subject_id bigint,
   outcome text
) LANGUAGE plpgsql AS
$$DECLARE
   v_sql text := '';
   v_sep text := '';
   v_tab text;
BEGIN
   FOR v_tab IN
      SELECT tables FROM tab_of_tabs
   LOOP
      v_sql := v_sql || v_sep ||
         format(
            'SELECT person_id, subject_id, outcome FROM %I',
            v_tab
         );
      v_sep := ' UNION ALL ';
   END LOOP;

   RETURN QUERY EXECUTE v_sql;
END;$$;

【讨论】:

以上是关于使用 PostgreSQL 从许多表中选择并合并相同的属性的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL ,从 2 个表中选择,但仅从表 2 中选择最新的元素

PostgreSQL - 如何从“选择不同”查询创建“维度”表并创建主键和外键?

从具有加权行概率的 PostgreSQL 表中选择随机行

PostgreSQL - 从相关表中复制列

Postgresql从具有不同列数的2个表中选择多条记录

从 postgresql 数据库中选择值并根据我需要完整查询插入/更新