【问题标题】:Select and union same attributes from many tables using PostgreSQL使用 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 次)?

【问题讨论】:

    标签: postgresql performance loops union-all


    【解决方案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;$$;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 2013-11-28
      相关资源
      最近更新 更多