Mysql 如何使用SQL查询连接数据库中具有相似名称的一组表?
例如,我有一个名为db的数据库,其中有100个表名为Mysql 如何使用SQL查询连接数据库中具有相似名称的一组表?,mysql,sql,Mysql,Sql,例如,我有一个名为db的数据库,其中有100个表名为ta_1塔乌100。每个表有两列id(int)和val(int) 如果我想得到val的总体平均值,我应该怎么做 如果我想得到一个包含两列的结果表:tablename(String)和mean(float),我应该怎么做 不用说,您不应该以这种方式设置数据库。有很多解决方案,从简单但平凡到困难但有用 在某些时候,您必须创建一个表列表,并准备一条语句将它们合并在一起。使用数据库视图复制(&Past)将是一个良好的开端: create view Gl
ta_1
<代码>塔乌100。每个表有两列id(int)
和val(int)
不用说,您不应该以这种方式设置数据库。有很多解决方案,从简单但平凡到困难但有用 在某些时候,您必须创建一个表列表,并准备一条语句将它们合并在一起。使用数据库视图复制(&Past)将是一个良好的开端:
create view GlobalView (
tabname varchar(10),
id int,
val int)
as
select 'ta_1', id, val from ta_1
UNION ALL
select 'ta_2', id, val from ta_2
UNION ALL
select 'ta_3', id, val from ta_3
UNION ALL
.....
UNION ALL
select 'ta_100', id, val from ta_100
然后,您只需运行选择:
select avg(1.0 * val) as mean
from GlobalView
另一种方法是创建一个动态查询,您可以从外部程序调用,也可以使用“动态SQL”我可以使用信息中的SELECT TABLE\u NAME\u SCHEMA.TABLES,其中TABLE\u TYPE='BASE TABLE'和TABLE\u SCHEMA='databasename'获取表名列表。是否有某种方法可以循环浏览列表?是的,有一种方法,它包含在“动态SQL”这一宽泛(可能太宽泛)的概念中。MySQL对动态SQL的支持非常有限,最好在查询外部创建循环,并处理来自程序的多个SQL调用,而不是来自单个语句或过程。