4

テーブルのリストを提供するテーブルからクエリを実行しています(さまざまな条件に基づいて、リストは異なります)。
テーブル名とその行数のリストを表示したい。どうすればこれを達成できますか?

私が試してみました

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

ただし、main_table のエントリ数を返すだけで、各テーブルのエントリ数は返しません。
システム テーブルを使用して行数を取得できますが、すべてのテーブルではなく特定のテーブルが必要なため、特定のクエリの行数が必要になる場合があります。

アルゴはこんな感じ

for tablenames in main_table where id>3:
    select count(*) from tablename where constraints    
4

4 に答える 4

5

次のようなことを試してください:

SELECT table_name, table_type, SUM(TABLE_ROWS) 
FROM information_schema.tables
WHERE table_schema = 'db5' -- or your own schema
    AND  table_type ='BASE TABLE'
    AND table_name LIKE 'mytables%'
GROUP BY table_name, table_type

またはこれ

SELECT table_name, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = '{your_db}'; 
于 2013-04-04T07:21:43.113 に答える
3

メタデータを簡単にクエリできます。

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;

SQL Fiddle の例

これにより、基本的にソリューションと同じ SQLUNION ALLが生成されますが、メイン テーブルの内容に基づいて SQL が作成されます。

于 2013-04-04T07:24:06.667 に答える
0

3つの
列を持つテーブルを作成する場合の動的SQL の例を次に示しますTable Name。の各テーブルの行数:Column XUser NameRowsTable Name

    SET @SQL = (select GROUP_CONCAT('SELECT ''',
                                    `テーブル名`,
                                    ''' AS `テーブル名`,
                                    ', quote(`ユーザー名`), ',
                                    COUNT(*) AS 行 FROM `',
                                    `テーブル名` SEPARATOR '` UNION ALL ')
                                    FROM `.tables`
               );
    PREPARE stmt FROM @SQL;
    EXECUTE ステートメント;
    DEALLOCATE PREPARE stmt;
于 2013-09-27T11:58:46.127 に答える
-1

動的 SQL を選択し、一部の列名に空のスペースが含まれていると、エラーが発生します。この場合、INFORMATION_SCHEMA.TABLES (使用する権利がある場合) を介したメタデータのみが機能しますが、動的 SQL クエリは機能しません!
テーブルがあり、そのテーブルにはTable Name、既存の他のテーブルの名前 (スペースを含む) を含む列名があるとします。
動的 SQL を使用する必要があり、いくつかの列名に空のスペースがある場合、正しいクエリは次のとおりです。

    SET @SQL = (select GROUP_CONCAT('SELECT ''',
                                `テーブル名`,
                                ''' AS `テーブル名`,
                                COUNT(*) AS 行 FROM `',
                                `テーブル名` SEPARATOR '` UNION ALL ')
            FROM main_table
            );
    PREPARE stmt FROM @SQL;
    EXECUTE ステートメント;
    DEALLOCATE PREPARE stmt;
于 2013-09-25T08:45:13.350 に答える