使用 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 中选择最新的元素