sql >> Database >  >> RDS >> Mysql

Selecteer kolomnamen waarvan de vermeldingen niet null zijn

Maak van de INFORMATION_SCHEMA.COLUMNS tabel een tekenreeks op die de SQL bevat die u wilt uitvoeren, en vervolgens een verklaring opstellen van die string en voer het uit.

De SQL die we willen bouwen ziet er als volgt uit:

  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 zou de WHERE kunnen weglaten clausule en vervang COUNT(*) voor COUNT(column) , maar ik denk dat kan minder efficiënt zijn voor geïndexeerde kolommen).

Dit kan als volgt worden gedaan:

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;

Bekijk het op sqlfiddle .



  1. Een PL/SQL-rijtrigger maken die een kolom uit een andere tabel valideert?

  2. Zoeken in een kolom met door komma's gescheiden waarden

  3. Gegevens ophalen uit sql-database en weergeven in tabellen - Bepaalde gegevens weergeven volgens aangevinkte selectievakjes

  4. C# DateTime verandert naar een ander formaat