如何将Mysql查询的特定字段的表名内容合并

目的

数据库里有上百张表,需要将表名结尾是 "_case" 字段的表合并导出。

目前只能将含有 "_case" 字段的表名查询出来,后续应该使用循环查询,不知道该如何实现。

SELECT table_name 
 FROM information_schema.TABLES 
WHERE table_schema='shujuheji'
AND table_type = 'base table' 
AND table_name LIKE '%_case';

可以通过以下步骤实现:

使用上述SELECT语句查询所有包含 "_case" 字段的表名。

将查询结果存储在一个数组中。

使用循环结构,对每个表名执行相同的查询操作。

将查询结果存储在一个新的数据表中。

以下是一个示例代码:

DELIMITER $$
CREATE PROCEDURE merge_case_tables()
BEGIN
    DECLARE table_name VARCHAR(255);
    DECLARE done INT DEFAULT 0;
    DECLARE cur CURSOR FOR
        SELECT table_name 
        FROM information_schema.TABLES 
        WHERE table_schema='shujuheji'
        AND table_type = 'base table' 
        AND table_name LIKE '%_case';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    DROP TEMPORARY TABLE IF EXISTS case_data;
    CREATE TEMPORARY TABLE case_data(
        case_data_id INT PRIMARY KEY AUTO_INCREMENT,
        column1 VARCHAR(255),
        column2 VARCHAR(255),
        column3 VARCHAR(255)
    );

    OPEN cur;
    REPEAT
        FETCH cur INTO table_name;
        IF NOT done THEN
            SET @sql = CONCAT('INSERT INTO case_data (column1, column2, column3) SELECT column1, column2, column3 FROM ', table_name);
            PREPARE stmt FROM @sql;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
        END IF;
    UNTIL done END REPEAT;
    CLOSE cur;
END$$
DELIMITER ;


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^