从另一个表中选择的表的mysql联合

时间:2017-02-14 20:47:08

标签: mysql union

我有大约300个具有相同字段类型的表,我有另一个表,其中列出了300个表及其状态。是否有一个查询解决方案来执行基于状态选择的表的并集。

让我们说300个表中的每一个都有用户记录(id,名字,姓氏)。另一个表有表和状态记录(表名,状态代码(活动/非活动))。我想从所有活动表创建用户记录的联合。

1 个答案:

答案 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大小限制也是如此)