【发布时间】:2015-03-20 10:56:12
【问题描述】:
我在名为 qgep 的架构中有一组表(大约 100 个),名称以 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中的记录来自哪个类?
【问题讨论】:
-
They have all the same columns (colA, colB, colC).将col_X添加到所有的列中,所有的值都不同,然后将这些表合并为一个大表。 -
动态 sql 仅适用于执行(或在 shell 脚本中:)
-
我在脚本中使用它。无论如何,我希望找到一个更好的方法。或许能学到一点。
-
为什么要一次性查询100张表?
-
每个表都列出了值列表(选择组合框)的可能选项,并且选项以多种语言列出。我想生成一张大表用作字典。
标签: sql postgresql information-schema