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:我没有。听起来您的数据没有标准化,或者您正在尝试重新创建关系数据库。所以这些表您是否拥有相同的结构?在检索数据后,您打算如何处理这些数据?