MySQL显示空表或空表列

时间:2014-08-22 08:53:49

标签: mysql

我有一个非常大的表,我想找出哪些列未使用(所有行为空或NULL)。有没有一种简单的方法可以使用查询或使用phpMyAdmin?

提前致谢!

6 个答案:

答案 0 :(得分:1)

您可以尝试在表格中的每个字段上使用sum()。该值将为' null'对于只有空值的字段。

select sum(id), sum(name), sum(field1), sum(field2) from play_table

答案 1 :(得分:0)

SELECT column, COUNT(*)
FROM table
GROUP BY column

然后你可以看到哪个值居住在column中的哪个数字。

答案 2 :(得分:0)

对于字符串列

SELECT SUM(CASE WHEN column is null or COALESCE(LTRIM(RTRIM(column)),'') = ''
                THEN 0 ELSE 1 END) AS ZERO_IF_COLUMN_IS_ALL_NULL
FROM TABLE

对于数字列

SELECT SUM(CASE WHEN column is null THEN 0 ELSE 1 END) AS ZERO_IF_COLUMN_IS_ALL_NULL
FROM TABLE

是的,您必须为每个列执行此操作,但您可以在单个select语句中执行多个操作。

答案 3 :(得分:-1)

这应该有效,但未经过测试。

SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'my_table'
AND column_default is  null;

答案 4 :(得分:-1)

SHOW columns from "TableName";

以上命令显示空表的列及其相应的属性 {ex:名称为varchar(50)或int AUTO_INCREMENT(主键)}

答案 5 :(得分:-2)

DELIMITER $$
CREATE PROCEDURE sp_empty()
BEGIN
  SET @sql = NULL;

  SELECT GROUP_CONCAT(
           CONCAT('(SELECT GROUP_CONCAT(id) FROM Table1 WHERE `', 
                  column_name, '` IS NULL ',
                  CASE  
                    WHEN data_type IN('varchar', 'char') 
                      THEN CONCAT('OR `', column_name, '` = ''''')
                    WHEN data_type IN('date', 'datetime', 'time') 
                      THEN CONCAT('OR `', column_name, '` = 0')
                    ELSE ''
                  END, ')`', column_name, '`'))
     INTO @sql
    FROM INFORMATION_SCHEMA.COLUMNS
   WHERE table_schema = SCHEMA()
     AND table_name = 'table1'
     AND column_name NOT IN ('id')
   GROUP BY table_name;

  SET @sql = CONCAT('SELECT ', @sql);

  PREPARE stmt FROM @sql;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;


to use this, which separate your null columns