一尘不染

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

sql

我在mysql 5.1.41中有以下查询:

从information_schema.tables中选择不同的table_schema,其中table_schema类似于'%dog%';

我想获取该命令的输出:

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

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

选择count(*)从(从dog_a.log中选择*,其中insane = 1 UNION ALL从* dog_b.log中选择*,其中insane = 1)作为total_count;

因此该算法本质上是:

对于数据库中的每个数据库,计算疯狂的狗的数量,然后将所有数据库的总数相加。但是,我不知道如何包装两个查询以从第一个查询中获取数据库名称,并将其作为可迭代输入到mysql中的第二个查询中。

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

有任何想法吗?

谢谢!


阅读 175

收藏
2021-05-16

共1个答案

一尘不染

这样的事情可能会做。我还没有很多“带有日志的狗”来对此进行测试,但是我尝试了一个经过稍微编辑的版本,并且基本的想法似乎行得通。

在变量中建立查询字符串,然后使用准备好的语句执行它。

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;
2021-05-16