Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wählen Sie Spaltennamen aus, deren Einträge nicht null sind

Erstellen Sie aus INFORMATION_SCHEMA.COLUMNS table einen String, der die SQL enthält, die Sie ausführen möchten, dann bereiten Sie eine Erklärung vor aus dieser Zeichenfolge und führen Sie sie aus.

Das SQL, das wir erstellen möchten, sieht folgendermaßen aus:

  SELECT 'column_a'
  FROM   table_name
  WHERE `column_a` IS NOT NULL
  HAVING COUNT(*)
UNION ALL
  SELECT 'column_b'
  FROM   table_name
  WHERE `column_b` IS NOT NULL
  HAVING COUNT(*)
-- etc.

(Man könnte WHERE weglassen -Klausel und ersetzen Sie COUNT(*) für COUNT(column) , aber ich denke das könnte bei indizierten Spalten weniger effizient sein).

Dies kann folgendermaßen erfolgen:

SET group_concat_max_len = 4294967295;

SELECT GROUP_CONCAT(
 ' SELECT ',QUOTE(COLUMN_NAME),
 ' FROM   table_name',
 ' WHERE `',REPLACE(COLUMN_NAME, '`', '``'),'` IS NOT NULL',
 ' HAVING COUNT(*)'
SEPARATOR ' UNION ALL ')
INTO   @sql
FROM   INFORMATION_SCHEMA.COLUMNS
WHERE  TABLE_SCHEMA = DATABASE()
   AND TABLE_NAME = 'table_name';

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Sehen Sie es auf sqlfiddle .