【问题标题】:mysql union of tables selected from another table从另一个表中选择的表的mysql联合
【发布时间】:2017-02-14 20:47:07
【问题描述】:

我有大约 300 个具有相同字段类型的表,我还有另一个表,其中包含这 300 个表及其状态的列表。是否有一个查询解决方案来合并基于状态选择的表。

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

【问题讨论】:

    标签: mysql union


    【解决方案1】:

    以某种方式是可能的。但是你为什么不只使用一个包含列 (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的大小限制)

    【讨论】:

    • @IlyaI 如果你真的必须使用第二种解决方案,你可以使用SET SESSION group_concat_max_len = 1000000;更改大小限制
    • 我已经在使用第一个解决方案,但想看看是否可以处理多个表。我会尝试第二种解决方案。谢谢!
    猜你喜欢
    • 2016-07-22
    • 1970-01-01
    • 2012-07-30
    • 2013-12-23
    • 1970-01-01
    • 2015-02-17
    • 2022-07-06
    相关资源
    最近更新 更多