如何快速从MySQL同结构4000张表中提取name列数据?
解决4000个同结构MySQL表提取name列的问题
这场景真的太折磨人了,手动写4000个UNION绝对会疯掉,用INFORMATION_SCHEMA生成动态SQL确实是最靠谱的解法,我给你一步步捋清楚:
步骤1:自动生成动态查询语句
先通过INFORMATION_SCHEMA定位所有包含name列的表,然后自动拼接出带UNION ALL的完整查询语句。执行下面的SQL(记得把你的数据库名称替换成实际库名):
-- 临时调整GROUP_CONCAT的最大长度,避免生成的语句被截断 SET SESSION group_concat_max_len = 1000000; SELECT CONCAT( GROUP_CONCAT( CONCAT('SELECT `name` FROM `', TABLE_SCHEMA, '`.`', TABLE_NAME, '`') SEPARATOR ' UNION ALL ' ), ';' ) AS dynamic_sql FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'name' AND TABLE_SCHEMA = '你的数据库名称';
这段SQL会输出一个完整的查询语句——它把所有目标表的name列查询用UNION ALL串联起来,完全不用你手动敲4000个表名。
步骤2:执行生成的动态SQL
把第一步查询结果里的dynamic_sql字段内容复制出来,直接在MySQL客户端运行,就能一次性拿到所有表中name列的全部数据了。
额外注意点
- 如果你的表名包含特殊字符(比如空格、中文),SQL里用反引号包裹表名和列名的操作能避免语法报错。
- 如果
GROUP_CONCAT返回的结果还是被截断,就把group_concat_max_len设得更大些,比如10000000。 - 确保你的数据库账号有访问
INFORMATION_SCHEMA以及所有目标表的权限。
内容的提问来源于stack exchange,提问作者CoderFriend
相关产品推荐
相关产品推荐

