Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Znajdź wszystkie te kolumny, które mają tylko wartości null, w tabeli MySQL

Możesz uniknąć używania procedury, tworząc dynamicznie (z INFORMATION_SCHEMA.COLUMNS table) ciąg, który zawiera kod SQL, który chcesz wykonać, a następnie przygotowywanie oświadczenia z tego ciągu i wykonanie go.

SQL, który chcemy zbudować, będzie wyglądał następująco:

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

Można to zrobić w następujący sposób:

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;

Zobacz go na sqlfiddle .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. właściwa składnia do użycia w pobliżu „?”

  2. Flask-SQLAlchemy - połączenia w locie z wieloma bazami danych

  3. przesyłanie wielu plików graficznych do galerii php mysql

  4. Wybierz wiersze MYSQL, ale wiersze w kolumny i kolumny w wiersze

  5. Jak wyświetlić dodatkowe rekordy w wierszu podrzędnym tabeli danych z odpowiednim identyfikatorem?