sql >> Databasteknik >  >> RDS >> Mysql

Hitta alla de kolumner som bara har nollvärden i en MySQL-tabell

Du kan undvika att använda en procedur genom att skapa dynamiskt (från INFORMATION_SCHEMA.COLUMNS tabell) en sträng som innehåller den SQL du vill köra, sedan förbereder ett uttalande från den strängen och exekvera den.

Den SQL vi vill bygga kommer att se ut så här:

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

Detta kan göras med hjälp av följande:

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;

Se den på sqlfiddle .



  1. Använda pseudokolumner med en länkad server

  2. java.lang.NoSuchFieldError:NONE i viloläge med Spring 3, maven, JPA, c3p0

  3. HOUR() Exempel – MySQL

  4. Normalisering i MYSQL