我的模式中有一组表(大约 100 个),名为qgep
以及哪些名字开头vl_
。
它们具有相同的列(colA、colB、colC)。
我想做的是得到一张大桌子,它是我所有的的联合体vl_*
表,还有一列包含原始表的名称。
我可以获得表格列表:
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'qgep'
AND table_name LIKE 'vl_%'
我发现解决问题的唯一方法是生成一个 SQL 命令来进一步执行它:
SELECT
string_agg(
'SELECT '''
||table_name
||''' AS table_name, colA, colB, colC FROM qgep.'
||table_name
, ' UNION ')::text
FROM information_schema.tables
WHERE table_schema = 'qgep'
AND table_name LIKE 'vl_%'"
然后执行这个SQL命令就会输出我想要的结果。虽然,它的性能非常差,而且很丑……
我想避免使用EXECUTE
。
您有什么建议吗?
有什么我可以做的吗WITH ... UNION ALL
?
继承对我有帮助吗?是否可以知道记录中的记录来自哪个类select
?
create or replace function uall() returns table ( code integer ,
value character varying(50),
active boolean,tablename text ) AS $$
declare
_i int;
_r record;
_t text := '';
begin
select distinct string_agg($s$select *,'$s$||table_name||$s$' from $s$||table_name,' union all ') into _t from information_schema.tables where table_name like 'vl_%';
return query execute _t;
end;$$ language plpgsql
;
select * from uall()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)