繁体   English   中英

如何自动从多个表中选择一列

[英]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

构建完查询后,使用PREPAREEXECUTE语句执行它,并返回结果查询(最后一行)。

此存储过程假定您的表中有相同的列。 如果每个表的列都不同,则必须实现一些逻辑来处理它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM