如何将INFORMATION_SCHEMA.TABLES中的表名存入@变量或另一表?
解决MySQL中捕获INFORMATION_SCHEMA表名并存储的问题
一、语法错误修复及单条表名存入变量
你之前的语句报错是因为子查询多了一层冗余括号,且若匹配到多条记录直接赋值会触发错误。如果目标表名唯一(比如smileys),可以用以下两种正确写法:
方式1:直接SELECT赋值
SELECT @name := TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'smileys' LIMIT 1;
添加LIMIT 1是为了避免匹配到多条记录时的报错,确保仅取一条结果赋值给变量。
方式2:用SET语句赋值
SET @name = (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'smileys' LIMIT 1);
二、多条表名存入变量
如果要把所有匹配%smi%的表名存入一个变量(以逗号分隔的字符串形式),可以使用GROUP_CONCAT:
SELECT @names := GROUP_CONCAT(DISTINCT TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%smi%';
DISTINCT用于去除重复的表名(比如你查询结果里重复的smiley_files)。
三、将表名存入另一张表
1. 先创建存储表(若不存在)
CREATE TABLE IF NOT EXISTS captured_tables ( table_name VARCHAR(255) NOT NULL, PRIMARY KEY (table_name) );
设置主键可自动避免重复插入数据。
2. 插入表名数据
INSERT INTO captured_tables (table_name) SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%smi%';
内容的提问来源于stack exchange,提问作者Rec
相关产品推荐
相关产品推荐

