sql >> データベース >  >> RDS >> Mysql

特定のデータベースからすべてのテーブル名、列名、および列値を取得します

    table_nameとcolumnnameを取得するには、次を使用できます:

    SELECT
     CONCAT(`table_name`, '-',
        GROUP_CONCAT(`column_name` ORDER BY ordinal_position SEPARATOR ':')) AS result
    FROM information_schema.columns
    -- WHERE `table_name` = ?
    GROUP BY `table_name`;
    

    SqlFiddleDemo

    出力:

    ╔══════════════╗
    ║    result    ║
    ╠══════════════╣
    ║ tab0-id:col  ║
    ║ tab1-id:col2 ║
    ║ tab2-id:col3 ║
    ╚══════════════╝
    

    各列のサンプルレコードを取得するには、dynamic-sqlを使用する必要があります:

    SET @sql = '';
    
    SELECT @sql := CONCAT(@sql, 
                          '(SELECT ''', `table_name`, ''' AS tab_name, ''', 
                                     `column_name`, ''' AS column_name, ',
                                     `ordinal_position`, ' AS ordinal_pos, ',
                                     `column_name`, ' AS sample '
                           'FROM ', `table_name` ,         
                           ' LIMIT 1) UNION ALL ')
    FROM information_schema.columns
    WHERE `table_name` LIKE 'tab_';
    
    SET @sql := SUBSTRING(@sql, 1, LENGTH(@sql) - 11);
    
    SET @final_sql = 
    'SELECT CONCAT(`tab_name`, ''-'',
        GROUP_CONCAT(CONCAT(`column_name`, '':'', sample ) ORDER BY ordinal_pos)) 
        AS result
     FROM ( <placeholder> ) AS sub
     GROUP BY tab_name';
    
    SET @final_sql = REPLACE(@final_sql, '<placeholder>', @sql);
    
    prepare s from @final_sql;
    execute s;
    
    deallocate prepare s;
    

    SqlFiddleDemo2 SqlFiddleDemo3

    出力:

    ╔════════════════════════════╗
    ║           result           ║
    ╠════════════════════════════╣
    ║ tab0-id:1,col:a            ║
    ║ tab1-id:10,col2:2          ║
    ║ tab2-id:20,col3:2016-01-26 ║
    ╚════════════════════════════╝
    



    1. ClusterControl1.8.2でPostgreSQL用のPgBouncer接続プールを使用する

    2. MariaDBでのCURTIME()のしくみ

    3. 昨日からのみレコードを選択するにはどうすればよいですか?

    4. mysqlテーブルの同じ列からカウントを取得しますか?