+-
mysql – 计算每个表的行数(从子查询返回表名)
我正在从一个表中进行查询,该表给出了表的列表(基于不同的条件列表会有所不同).
我想显示表名列表及其行数.我怎样才能实现这一目标?

我试过了

select count(*) from (select tablename from main_table) as t;

但它只返回main_table中的条目数,但不返回每个表中条目的数量.
我可以使用系统表来获取rowcount,但我不想要所有表但只需要特定的表,并且可能需要特定查询的行数.

Algo就是这样的

for tablenames in main_table where id>3:
    select count(*) from tablename where constraints    
最佳答案
您可以简单地查询元数据:

SELECT  Table_Name, table_rows
FROM    INFORMATION_SCHEMA.TABLES
WHERE   TABLE_TYPE = 'BASE TABLE'
AND     TABLE_SCHEMA = 'YourDatabase';

或者您需要使用UNION ALL

SELECT  'T1' AS TableName, COUNT(*) AS Rows
FROM    T1
UNION ALL
SELECT  'T2' AS TableName, COUNT(*) AS Rows
FROM    T2
UNION ALL
SELECT  'T3' AS TableName, COUNT(*) AS Rows
FROM    T3;

如果需要动态完成,那么您可以使用动态SQL:

SET @SQL = (SELECT GROUP_CONCAT('SELECT ''', 
                                TableName, 
                                ''' AS TableName, COUNT(*) AS Rows FROM ', 
                                TableName SEPARATOR ' UNION ALL ')
            FROM MainTable
            --WHERE Some condition to limit tables
            );

PREPARE stmt FROM @SQL;
EXECUTE stmt;

Example on SQL Fiddle

这实际上产生与UNION ALL解决方案相同的SQL,但是根据主表的内容创建SQL.

点击查看更多相关文章

转载注明原文:mysql – 计算每个表的行数(从子查询返回表名) - 乐贴网