Mysql 从多个表名中选择*

Mysql 从多个表名中选择*,mysql,select,Mysql,Select,我想从数据库中的每个表中选择*。我该怎么做 我尝试了以下脚本: SELECT * FROM ( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG = 'databasename' ) SELECT TABLE\u NAME FROM INFORMATION\u SCHEMA.TABLES\u CATALOG='databasename'已经

我想从数据库中的每个表中选择*。我该怎么做

我尝试了以下脚本:

SELECT * 
  FROM 
     ( SELECT TABLE_NAME 
         FROM INFORMATION_SCHEMA.TABLES 
         WHERE TABLE_CATALOG = 'databasename'
     )

SELECT TABLE\u NAME FROM INFORMATION\u SCHEMA.TABLES\u CATALOG='databasename'
已经返回了数据库的每个tablename,但是我如何从这个“列表”中选择所有内容呢?

光标非常有用的一种情况,因为您需要迭代信息\u SCHEMA表,构建一条准备好的语句并执行它(注意,一次只能向动态sql提交一条语句)

drop procedure if exists p;

delimiter $$
CREATE  PROCEDURE p()

begin 
     declare vtable_name varchar(100);
     declare done int;
    declare c7 cursor for SELECT   TABLE_NAME 
         FROM INFORMATION_SCHEMA.TABLES 
         WHERE TABLE_schema = 'sandbox' and table_type = 'base table' and table_name in ('t', 't1');

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    open c7;
    cursorloop:loop
        fetch c7 into vtable_name;
        if done = true then  
        leave cursorloop;
        end if;  
        set @sql = concat('select * from ', vtable_name,';');
        select @sql;
        prepare sqlstmt from @sql;
        execute sqlstmt;
        deallocate prepare sqlstmt; 
     end loop cursorloop;
    close c7;
 end $$

 delimiter ;

 call p();
注意:我限制了光标选择以便于说明,并限制了返回到基表的内容(您可能希望也可能不希望包含视图)


请特别注意构建的sql语句。

游标非常有用,因为您需要迭代信息模式表,构建准备好的语句并执行它(注意,一次只能向动态sql提交一条语句)

drop procedure if exists p;

delimiter $$
CREATE  PROCEDURE p()

begin 
     declare vtable_name varchar(100);
     declare done int;
    declare c7 cursor for SELECT   TABLE_NAME 
         FROM INFORMATION_SCHEMA.TABLES 
         WHERE TABLE_schema = 'sandbox' and table_type = 'base table' and table_name in ('t', 't1');

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    open c7;
    cursorloop:loop
        fetch c7 into vtable_name;
        if done = true then  
        leave cursorloop;
        end if;  
        set @sql = concat('select * from ', vtable_name,';');
        select @sql;
        prepare sqlstmt from @sql;
        execute sqlstmt;
        deallocate prepare sqlstmt; 
     end loop cursorloop;
    close c7;
 end $$

 delimiter ;

 call p();
注意:我限制了光标选择以便于说明,并限制了返回到基表的内容(您可能希望也可能不希望包含视图)


请特别注意内置的sql语句。

无法理解您的问题,如果要选择多个表名,能否告诉我们查询条件?例如在指定数据库中或使用某些特殊名称prefix@lucumt你现在明白我的问题了吗?:如果你想选择每一列,为什么不使用
*
而不是
表格_子菜单中的名称
query@David:我不知道。听起来好像您的数据没有规范化,或者您正在尝试重新创建关系数据库。所以这些表具有相同的结构?在检索数据后,您打算如何处理这些数据?无法理解您的问题,如果要选择多个表名,能否告诉我们查询条件?例如,在指定数据库中或使用某些特殊名称prefix@lucumt你现在明白我的问题了吗?:如果你想选择每一列,为什么不使用
*
而不是子列中的
表名
query@David:我没有。听起来您的数据没有标准化,或者您正在尝试重新创建关系数据库。所以这些表您是否拥有相同的结构?在检索数据后,您打算如何处理这些数据?