我有大约300个具有相同字段类型的表,我有另一个表,其中列出了300个表及其状态。是否有一个查询解决方案来执行基于状态选择的表的并集。
让我们说300个表中的每一个都有用户记录(id,名字,姓氏)。另一个表有表和状态记录(表名,状态代码(活动/非活动))。我想从所有活动表创建用户记录的联合。
答案 0 :(得分:0)
有可能以某种方式。但是,为什么不使用带有列的单个表(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中创建一个union all查询,然后它将执行它。需要对表进行必要的转义,对于group_concat大小限制也是如此)