在所有数据库中使用用户表中的字段

时间:2018-10-03 12:15:11

标签: mysql sql

我们有1个主要的(MySQL)数据库(main),其中包含常规信息,包括供用户使用的表以及一些信息。

此外,我们为每个公司(main_1main_2,...)有一个数据库,还有一个用于(重复)用户的表。 第二层用户表包含第一层用户所没有的信息。

因此,我们需要使用第2层数据库中的值来过滤第1层数据库中的用户。

我知道我们可以使用以下方法获取数据库列表:

SELECT *
FROM information_schema.SCHEMATA
WHERE schema_name LIKE "main_%"

但是然后我们需要合并所有数据库中的用户表。

如果有人有一个主意,那就很有责任了。

1 个答案:

答案 0 :(得分:0)

例如,您需要构建一条语句以呈现给动态sql

set @sql = 
(select  group_concat('select * from ', schema_name,'.users union all ') 
from
(
SELECT schema_name FROM information_schema.SCHEMATA
) s
)
;
set @sql = replace(@sql,',', ' ');
set @sql = substring(@sql, 1, length(@sql) - 11);
set @sql = concat(@sql,';');

产生(在我的数据库中)

select @sql

select * from bank.users union all  
select * from classicmodels.users union all  
select * from information_schema.users union all  
select * from mysql.users union all  
select * from performance_schema.users union all  
select * from sandbox.users union all  
select * from test.users;

然后您提交

prepare sqlstmt from @sql;
execute sqlstmt;
deallocate prepare sqlstmt;