Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pilih nama kolom yang entrinya bukan null

Buat dari INFORMATION_SCHEMA.COLUMNS tabel string yang berisi SQL yang ingin Anda jalankan, lalu siapkan pernyataan dari string itu dan jalankan.

SQL yang ingin kita buat akan terlihat seperti:

  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.

(Seseorang dapat menghilangkan WHERE klausa dan ganti COUNT(*) untuk COUNT(column) , tapi saya berpikir yang mungkin kurang efisien pada kolom yang diindeks).

Ini dapat dilakukan dengan menggunakan yang berikut:

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;

Lihat di 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. Pesan Kesalahan Kustom Php Mysqli

  2. Mysql Regex untuk menggantikan 0 dari ipv4

  3. koneksi database dinamis symfony2 menggunakan doktrin

  4. Pernyataan MySQL ke tabel pivot tanpa menggunakan fungsi pivot atau gabungan

  5. Laporan Kehadiran di MySql