Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chọn tên cột có mục nhập không rỗng

Tạo từ INFORMATION_SCHEMA.COLUMNS bảng một chuỗi chứa SQL mà bạn muốn thực thi, sau đó chuẩn bị một tuyên bố từ chuỗi đó và thực thi nó.

SQL mà chúng tôi muốn xây dựng sẽ giống như sau:

  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.

(Người ta có thể bỏ qua WHERE mệnh đề và thay thế COUNT(*) cho COUNT(column) , nhưng tôi nghĩ rằng có thể kém hiệu quả hơn trên các cột được lập chỉ mục).

Điều này có thể được thực hiện bằng cách sử dụng như sau:

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;

Xem nó trên 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. Truy vấn Mysql cột WHERE nằm trong mảng json

  2. MYSQL vào quyền truy cập outfile bị từ chối - nhưng người dùng của tôi có TẤT CẢ quyền truy cập .. và thư mục là CHMOD 777

  3. Cách kiểm tra các nút radio

  4. Cách sử dụng một biến làm tên cột cho câu lệnh SELECT

  5. Đối sánh với foo.bar (với dấu chấm hết / khoảng thời gian)