Oracle Query在24个具有相同列的表上

时间:2013-06-20 20:56:35

标签: sql oracle oracle11g oracle10g

我有24个表table1,table2,table3 ...具有相同的列以跟踪每小时的客户数据和一个速率表,该速率表应用于特定小时,rateId是所有其他24个中的外键表,我需要一个动态查询来基于日期和时间从这些表中获取数据。任何人都可以为该查询提供示例或指导我。

1 个答案:

答案 0 :(得分:2)

您不应将相同的数据存储在24个不同的表中。当您拥有大量数据并希望因性能原因而将其拆分时,分区(在评论中提及)是一个非常好的解决方案。

在任何情况下,构建查询的一种方法是:

select t.*
from ((select * from table1) union all
      (select * from table2) union all
      . . .
      (select * from table24)
     ) t
where <whatever you want>

然后,您可以将此连接到您喜欢的任何其他表(例如,使用rateId),过滤字段等等。

如果你需要知道某个地方的来源,那么你也可以得到这个:

select t.*
from ((select t.*, 1 as which from table1 t) union all
      (select t.*, 2 as which from table2 t) union all
      . . .
      (select t.*, 24 as which from table24 t)
     ) t
where <whatever you want>

注意:我在这里使用*因为OP明确声明表格具有相同的格式。即便如此,列出每个子查询中的所有列可能是个好主意。

编辑:

正如比尔在评论中所说,你可能想把它变成一个视图。这样,您可以在表上编写大量查询,而无需担心详细的表。 (而且,更好的是,您可以通过组合表来修复数据结构,然后更改视图,现有查询将起作用)。