首页 文章

是否可以对mysql数据库中的每个数据库执行查询,并仅使用mysql命令环境求和或合并结果?

提问于
浏览
1

我在mysql 5.1.41中有以下查询:

select distinct table_schema from information_schema.tables where table_schema like '%dog%';

我想获取该命令的输出:

+-------------------+
| table_schema      |
+-------------------+
| dog_a             |
| dog_b             |
+-------------------+

然后使用数据库名称作为查询的输入,如下所示:

select count(*) from (select * from dog_a.log where insane = 1 UNION ALL select * from dog_b.log where insane = 1) as total_count;

这样算法基本上是:

对于数据库中的每个数据库,计算疯狂狗的数量并总计所有数据库的总数 . 但是,我不知道如何结束这两个查询以将第一个查询中的数据库名称作为可迭代输入到mysql中的第二个查询 .

我需要能够在数据库中完全执行此操作 .

有任何想法吗?

谢谢!

1 回答

  • 2

    这样的事情可能会发生 . 我没有一堆'dog-with-logs'来测试这个,但我尝试了一个略微编辑的版本,基本的想法似乎工作 .

    在变量中构建查询字符串,然后使用prepared statement来执行它 .

    SELECT @query:=CONCAT(
          'select count(*) from ('
        , GROUP_CONCAT( CONCAT( y.prefix, x.table_schema, y.postfix ) SEPARATOR ' UNION ALL ' )
        , ') as total_count' )
    FROM (
        SELECT  DISTINCT table_schema
        FROM    information_schema.tables
        WHERE   table_schema LIKE '%dog%'
        ) AS x
    JOIN (
        SELECT
              'select * from '        AS prefix
            , '.log where insane = 1' AS postfix 
        ) AS y
    ;
    
    -- SELECT @query AS Query;
    
    PREPARE STMT FROM @query;
    EXECUTE STMT;
    DEALLOCATE PREPARE STMT;
    

相关问题