mysql 查询 所有的 非空记录字段
sql
CREATE DEFINER=`root`@`%` PROCEDURE `find_actual_non_null_columns`(IN db_name VARCHAR(255))
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE tab_name VARCHAR(255);
DECLARE col_name VARCHAR(255);
DECLARE cur CURSOR FOR
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = db_name;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
DROP TEMPORARY TABLE IF EXISTS temp_non_null_columns;
CREATE TEMPORARY TABLE temp_non_null_columns (
table_name VARCHAR(255),
column_name VARCHAR(255)
);
OPEN cur;
read_loop: LOOP
FETCH cur INTO tab_name, col_name;
IF done THEN
LEAVE read_loop;
END IF;
-- 检查该字段是否有非空记录(非全是null)
SET @query = CONCAT(
'SELECT COUNT(*) INTO @non_null_count FROM `', db_name, '`.`', tab_name, '` WHERE `', col_name, '` IS NOT NULL AND `', col_name, '` != '''''
);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 如果有非空记录,说明该字段非全是null
IF @non_null_count > 0 THEN
INSERT INTO temp_non_null_columns VALUES (tab_name, col_name);
END IF;
END LOOP;
CLOSE cur;
SELECT
table_name AS table_name,
column_name AS column_name
FROM temp_non_null_columns
ORDER BY table_name, column_name;
END
调用
sql
CALL find_actual_non_null_columns('schy');