对表列表中的每个条目运行查询

时间:2019-05-24 17:31:15

标签: mysql

我打算编写一个过程,以对提供的列表(可以是逗号分隔的列表或表,尚未确定)中的每个表运行查询

我首先创建了一个while循环来迭代提供的列表中的每个元素。能够提取每个元素,但我不知道如何为提取的元素/表运行查询。

DELIMITER $$
DROP PROCEDURE IF EXISTS retain_demo_clients$$
CREATE PROCEDURE retain_demo_clients()
BEGIN

DECLARE counter  INT(10);
DECLARE client_tables  VARCHAR(255);
DECLARE table_count  INT(10);
DECLARE table_in_process  VARCHAR(255);

SET counter = 1;
SET table_count = 3;
SET client_tables = 'client_table, somerandomstuff, somemorestuff';


WHILE (counter < table_count +1) DO
    SET table_in_process = substring_index(substring_index(client_tables, ',',counter),',',-1);
    SELECT table_in_process;
    SET counter = counter +1;
END WHILE;


END$$
DELIMITER ;

CALL retain_demo_clients();

我希望做类似“从table_in_process中选择*”的操作。如果有更好的方法遍历表列表,也将不胜感激。

如果有人想修补,这里是DBFiddle链接:https://www.db-fiddle.com/f/v6EMsiWvXFrBoNLgoZwDVX/1

1 个答案:

答案 0 :(得分:0)

您可以使用EXECUTE来运行表示单个语句的文本

SET @someQuery =  CONCAT('SELECT * FROM ', table_in_process ) ;
PREPARE preparable_stmt FROM @someQuery;
EXECUTE preparable_stmt;