sql >> Databáze >  >> RDS >> Mysql

Vyberte názvy sloupců, jejichž položky nejsou null

Vytvořte z INFORMATION_SCHEMA.COLUMNS tabulka řetězec obsahující SQL, který chcete spustit, a poté připravit prohlášení z tohoto řetězce a spustit jej.

SQL, které chceme sestavit, bude vypadat takto:

  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.

(Je možné vynechat WHERE klauzuli a nahraďte COUNT(*) pro COUNT(column) , ale myslím to může být u indexovaných sloupců méně efektivní).

To lze provést pomocí následujícího:

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;

Podívejte se na sqlfiddle .



  1. Jak používat JAKÝKOLI / NĚKTERÝ logický operátor v SQL Server - SQL Server / TSQL výukový program, část 127

  2. Došlo k chybě JNI, zkontrolujte prosím svou instalaci a zkuste to znovu v Eclipse x86 Windows 8.1

  3. Výkon serveru SQL:Co je rychlejší, uložená procedura nebo pohled?

  4. Smazat náhle trvá dlouho