【发布时间】:2017-02-14 20:47:07
【问题描述】:
我有大约 300 个具有相同字段类型的表,我还有另一个表,其中包含这 300 个表及其状态的列表。是否有一个查询解决方案来合并基于状态选择的表。
假设 300 个表中的每一个都有用户记录(id、名字、姓氏)。另一个表记录了表和状态(表名、状态码(活动/非活动))。我想从所有活动表中创建用户记录的联合。
【问题讨论】:
我有大约 300 个具有相同字段类型的表,我还有另一个表,其中包含这 300 个表及其状态的列表。是否有一个查询解决方案来合并基于状态选择的表。
假设 300 个表中的每一个都有用户记录(id、名字、姓氏)。另一个表记录了表和状态(表名、状态码(活动/非活动))。我想从所有活动表中创建用户记录的联合。
【问题讨论】:
以某种方式是可能的。但是你为什么不只使用一个包含列 (id, first_name, last_name, table_name) 的表呢?查询很简单:
select
m.id, m.first_name, m.last_name
from
mytable m inner join tables t on
m.table_name = t.table_name
where
t.status='Active'
如果有适当的索引,它会很高效。
不改变表结构的解决方案需要例如动态查询,但我不推荐它:
select
group_concat(
concat('select * from ', table_name)
separator ' union all '
) gc
from
status
where
status='Active'
into @sql;
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
(这将创建一个联合所有查询到字符串sql,然后执行它。表需要适当地转义,还要注意group_concat的大小限制)
【讨论】:
SET SESSION group_concat_max_len = 1000000;更改大小限制