我有一个非常大的表,我想找出哪些列未使用(所有行为空或NULL)。有没有一种简单的方法可以使用查询或使用phpMyAdmin?
提前致谢!
答案 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