[英]How to automate selection of a column from multiple tables
我有几个表至少 26 ......我试图从所有表中选择一列并将它们显示为一个
我试过这个:
(SELECT col1,col2,col3,col4 FROM table1 ORDER BY col1 DESC LIMIT 1) UNION (SELECT col1,col2,col3,col4 FROM table2 ORDER BY col1 DESC LIMIT 1)
这有效,但我必须根据我拥有的表格数量进行多次复制和粘贴,这不是很有效。 请帮助——我刚开始学习 mysql,我一直在努力解决这个问题。
您可以通过在存储过程中使用游标来实现,如下所示:
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE tablename VARCHAR(100);
DECLARE tableschema VARCHAR(100);
DECLARE sql_union_tables TEXT;
DECLARE tables_cursor CURSOR FOR SELECT TABLE_NAME, TABLE_SCHEMA FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = 'DbInscripciones' AND TABLE_NAME LIKE 'TblFaltasA%';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN tables_cursor;
SET sql_union_tables = '';
read_loop: LOOP
FETCH tables_cursor INTO tablename, tableschema;
IF done THEN
LEAVE read_loop;
END IF;
IF sql_union_tables = '' THEN
SET sql_union_tables = CONCAT('(SELECT numcontrol FROM ', tableschema, '.', tablename, ' LIMIT 1)');
ELSE
SET sql_union_tables = CONCAT(sql_union_tables, ' UNION ALL (SELECT numcontrol FROM ', tableschema, '.', tablename, ' LIMIT 1)');
END IF;
END LOOP;
CLOSE tables_cursor;
SET sql_union_tables = CONCAT(sql_union_tables, ';');
PREPARE stmt FROM sql_union_tables;
EXECUTE stmt;
SELECT sql_union_tables;
END
让我们分部分解释这一点。 您可以通过查询information_schema
数据库获得所需表名的列表, tables_cursor
游标将允许您遍历该表列表。
在迭代部分,您使用从游标查询中获得的表构造一个查询并将其保存在sql_union_tables
。
构建完查询后,使用PREPARE
和EXECUTE
语句执行它,并返回结果查询(最后一行)。
此存储过程假定您的表中有相同的列。 如果每个表的列都不同,则必须实现一些逻辑来处理它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.