Mysql 如何使用SQL查询连接数据库中具有相似名称的一组表?

Mysql 如何使用SQL查询连接数据库中具有相似名称的一组表?,mysql,sql,Mysql,Sql,例如,我有一个名为db的数据库,其中有100个表名为ta_1塔乌100。每个表有两列id(int)和val(int) 如果我想得到val的总体平均值,我应该怎么做 如果我想得到一个包含两列的结果表:tablename(String)和mean(float),我应该怎么做 不用说,您不应该以这种方式设置数据库。有很多解决方案,从简单但平凡到困难但有用 在某些时候,您必须创建一个表列表,并准备一条语句将它们合并在一起。使用数据库视图复制(&Past)将是一个良好的开端: create view Gl

例如,我有一个名为db的数据库,其中有100个表名为
ta_1
<代码>塔乌100。每个表有两列
id(int)
val(int)

  • 如果我想得到val的总体平均值,我应该怎么做
  • 如果我想得到一个包含两列的结果表:tablename(String)和mean(float),我应该怎么做

  • 不用说,您不应该以这种方式设置数据库。有很多解决方案,从简单但平凡到困难但有用

    在某些时候,您必须创建一个表列表,并准备一条语句将它们合并在一起。使用数据库视图复制(&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调用,而不是来自单个语句或过程。