SQL

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

发布于 2021-05-20 11:11:33

我在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中的第二个查询中。

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

有任何想法吗?

谢谢!

关注者
0
被浏览
77
1 个回答
  • 面试哥
    面试哥 2021-05-20
    为面试而生,有面试问题,就找面试哥。

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

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

    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;
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看