我有十几个具有相同结构的表。他们的所有名字都与question_20%
相符。每个表都有一个名为loaded
的索引列,其值可以为0
和1
。
我想计算所有loaded = 1
的记录。如果我只有一张桌子,我会跑select count(*) from question_2015 where loaded = 1
。
我是否可以运行查询INFORMATION_SCHEMA.TABLES
中的表,对所有这些计数求和,并生成单个输出?
答案 0 :(得分:1)
评论太长了。
您可以使用动态SQL执行所需操作。我相信有人会解决这个问题。
但是,您的数据结构存在问题。拥有多个并行表通常是一个非常糟糕的主意。 SQL支持非常大的表,因此从查询(正如您现在正在学习)和可维护性的角度来看,将一个表中的所有信息放在一起是非常方便的。
SQL提供了索引和分区方案,用于解决大型表上的性能问题。
有时,需要单独的表,以满足特定的系统要求。如果是这样,那么应该有一个视图可以组合所有表:
create view v_tables as
select t1.*, 'table1' as which from table1 union all
select t2.*, 'table2' as which from table2 union all
. . .
如果你有这样的观点,那么你的查询就是:
select which, count(*)
from v_tables
where loaded = 1
group by which;