-1

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

4

1 回答 1

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 明确声明表格具有相同的格式。即便如此,列出每个子查询中的所有列可能是个好主意。

编辑:

正如比尔在评论中建议的那样,您可能希望将其转换为视图。这样,您可以在表上编写大量查询,而不必担心详细的表。(而且,更好的是,您可以通过组合表来修复数据结构,然后更改视图,现有查询将起作用)。

于 2013-06-20T21:03:03.010 回答