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

MySQLテーブルでnull値のみを持つすべての列を検索します

    INFORMATION_SCHEMA.COLUMNS 表)実行するSQLを含む文字列、次にステートメントの準備 その文字列から実行します。

    構築するSQLは次のようになります:

    SELECT * FROM (
      SELECT 'tableA' AS `table`,
             IF(COUNT(`column_a`), NULL, 'column_a') AS `column`
      FROM   tableA
    UNION ALL
      SELECT 'tableB' AS `table`,
             IF(COUNT(`column_b`), NULL, 'column_b') AS `column`
      FROM   tableB
    UNION ALL
      -- etc.
    ) t WHERE `column` IS NOT NULL
    

    これは、次を使用して実行できます。

    SET group_concat_max_len = 4294967295; -- to overcome default 1KB limitation
    
    SELECT CONCAT(
             'SELECT * FROM ('
           ,  GROUP_CONCAT(
                'SELECT ', QUOTE(TABLE_NAME), ' AS `table`,'
              , 'IF('
              ,   'COUNT(`', REPLACE(COLUMN_NAME, '`', '``'), '`),'
              ,   'NULL,'
              ,    QUOTE(COLUMN_NAME)
              , ') AS `column` '
              , 'FROM `', REPLACE(TABLE_NAME, '`', '``'), '`'
              SEPARATOR ' UNION ALL '
             )
           , ') t WHERE `column` IS NOT NULL'
           )
    INTO   @sql
    FROM   INFORMATION_SCHEMA.COLUMNS
    WHERE  TABLE_SCHEMA = DATABASE();
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    sqlfiddle でご覧ください 。



    1. PHP警告:mysqli_connect():(HY000 / 2002):接続が拒否されました

    2. MariaDB文字列関数(完全なリスト)

    3. Spring Data JPA + Hibernate Skip Locked rows(PostgreSQL)

    4. MySQLでのLPAD()関数のしくみ