简体   繁体   中英

How to automate selection of a column from multiple tables

I have several tables at least 26 ... i'm trying to select a column from all tables and displaying them as one

i tried this :

(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)

this works but i have to copy and paste a bunch of times depending on how many number of tables i have which isn't very effective . Please Help -- i just started learning mysql and i'm stuck trying to fix this.

You can do it by using a cursor inside a stored procedure, like this:

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

Let's explain this by parts. You get a list of desired table names by querying the information_schema database, and the tables_cursor cursor will allow you to iterate over that table list.

In the iteration part you construct a query using the tables obtained from the cursor query and save it in sql_union_tables .

After you finish constructing the query you execute it with the PREPARE and EXECUTE statements and also return the resulting query (last line).

This stored procedures assumes you have the same columns in your tables. If your columns vary for each table you'll have to implement some logic to deal with that.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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