查询 mysql中 所有的 非空记录字段

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');
相关推荐
CQU_JIAKE15 小时前
9.10【A】
数据库
乐观的Terry16 小时前
Redis生产环境redis-conf配置教程
数据库·redis
SeaTunnel16 小时前
Redis 数据迁移不用写脚本:SeaTunnel 支持 String、Hash、Set、ZSet 四种数据类型
数据库·redis·哈希算法·数据迁移·seatunnel·数据同步
晊晌_h16 小时前
嵌入式从0到精通——SQLite3 数据库
数据库·sqlite·sqlite3
海浪仙人掌16 小时前
账龄分析怎么操作?账龄分析实施流程有哪些步骤?
数据库
楚枫默寒16 小时前
Oracle AWR 自动巡检报告
数据库·oracle
吉甫作诵16 小时前
Oracle 19c 常用运维命令大全
运维·数据库·oracle
宗介波妞16 小时前
主站与场站多业务链路通断测试实战指南(电力自动化联调)
网络·数据库
邪修king16 小时前
MySQL数据库(二):操作详解:从创建、查看到备份恢复
数据库·mysql
tryxr16 小时前
Chat2Excel 项目用户服务开发
java·数据库·java项目·用户服务开发