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

Wybierz nazwy kolumn, których wpisy nie są puste

Utwórz z INFORMATION_SCHEMA.COLUMNS tabela ciąg zawierający SQL, który chcesz wykonać, a następnie przygotuj oświadczenie z tego ciągu i wykonaj go.

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

  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.

(Można pominąć WHERE klauzula i zastąp COUNT(*) dla COUNT(column) , ale myślę może to być mniej wydajne w przypadku indeksowanych kolumn).

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

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;

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. jak stworzyć wyzwalacz do łączenia pól

  2. MONGODB:Konwertuj zapytanie SQL Union

  3. Zapisywanie ścieżki pliku do Bazy danych / SQL

  4. Napisz zapytanie wybierające, aby uzyskać wartość tabeli przy użyciu innej wartości pola tabeli

  5. Napraw zduplikowane wpisy DB (błąd MySQL)