从表

时间:2018-04-11 17:04:17

标签: sql select

我有一个名为 db 的数据库,其表格具有相同的架构,例如:

table_1,table_2,... table_n

假设每个表都有“”和“”列,我想选择所有n个表中 key =的所有行的 'x'

例如,对于key ='1'的以下表格:

table_1 = {'1'=> 'aaa','2'=> 'XYZ'}

table_2 = {'1'=> 'bbb,'3'=> 'ZZZ'}

table_3 = {'1'=> 'ccc,'3'=> 'XXX'}

我希望结果集为{'1'=> 'aaa','1'=> 'bbb','1'=> 'CCC'}

我查了一下,发现我可以从INFORMATION_SCHEMA中选择所有表格,如下所示:

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('value')
    AND TABLE_SCHEMA='db';

但现在我需要找到一种以这种方式迭代结果集的方法(伪代码):

foreach (table in tablesResultSet)
{ results += SELECT * FROM table WHERE key = 'x' }

我为粗伪代码道歉,但我发现这是描述问题的最佳方式。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:-1)

通常,具有相同模式的多个表会转到按日期,位置或其他一些鉴别符进行分区的一个大型逻辑表。在归档,查询等方面,这可以更加高效。

但是如果你想这样做,你应该使用支持表继承或一些等效概念的RDBMS。您不想使用数据库的内部结构,然后必须根据结果动态构建查询。

Postgresql 10允许您设置partitioning scheme,几乎所有内容都为您完成;早期版本(和10个保留)继承关系,让您通过一些工作来完成此任务。我怀疑其他供应商有类似的功能,如果你真的需要一个分区设置(无法从你的虚拟示例中确定),我会根据这个功能选择一个RDBMS。