sql >> Database teknologi >  >> RDS >> Mysql

Find alle de kolonner, der kun har nulværdier, i en MySQL-tabel

Du kan undgå at bruge en procedure ved dynamisk at oprette (fra INFORMATION_SCHEMA.COLUMNS tabel) en streng, der indeholder den SQL, du ønsker at udføre, derefter udarbejdelse af en erklæring fra den streng og udføre den.

Den SQL, vi ønsker at bygge, vil se sådan ud:

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

Dette kan gøres ved at bruge følgende:

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. Sådan installeres pgAdmin 4 på Ubuntu 20.04/18.04/16.04

  2. Hvordan forespørger man denne MySQL-tabel på den mest effektive måde?

  3. Gem en PDF-fil i MySQL

  4. Sådan opsætter du Oracle EBS Auditing