【问题标题】:How to query multiple SQL tables with the same table schema?如何查询具有相同表架构的多个 SQL 表?
【发布时间】:2017-09-13 02:30:01
【问题描述】:

我有以下基于每周存档创建的表格列表。

dbtable
dbtable_01_04_2017
dbtable_01_07_2017
dbtable_02_09_2017
dbtable_03_06_2017
dbtable_05_08_2017
dbtable_06_05_2017
dbtable_08_04_2017
dbtable_08_07_2017
dbtable_09_09_2017
dbtable_10_06_2017
dbtable_12_08_2017
dbtable_13_05_2017
dbtable_15_04_2017
dbtable_15_07_2017
dbtable_17_06_2017
dbtable_19_08_2017
dbtable_20_05_2017
dbtable_22_04_2017
dbtable_22_07_2017
dbtable_24_06_2017
dbtable_26_08_2017
dbtable_27_05_2017
dbtable_29_04_2017
dbtable_29_07_2017

它们都具有完全相同的列结构:

TIME_STAMP、用户名、信息、原因

我需要使用相同的查询一次查询所有这些,当然只能通过更改下面示例查询中的表名。

 SELECT * FROM dbtable WHERE USERNAME="XXXX";

我搜索了一下,希望有一种方法可以在查询中使用通配符名称,但我了解到 SQL 不支持这种方法。

基本上,我正在寻找某种 for 循环来将查询迭代到多个表。

请注意,每周都会根据我们的存档自动化添加新表格。

【问题讨论】:

  • 请证明每周的餐桌是合理的。然后我们将尝试解释为什么这样没有优势。

标签: mysql sql mariadb


【解决方案1】:

问题在于您的数据结构。具有相同格式的多个表通常是一个坏主意。您应该有一个表格,其中有一列是日期。

哦,等等,您关心的是性能,因为每个现有的表都很大。这就是(大多数)数据库支持分区的原因。你可以在documentation阅读它。

如果您不走这条路,一种可能性是创建一个包含所有表的视图——然后在添加表时更改视图以包含最新表。当然,查询最终可能会读取所有表,因此效率不会很高。

正确的解决方案是使用具有多个分区的单个表。

【讨论】:

【解决方案2】:

您可以编写一个存储过程来查询哪些表存在并在这些表上执行SELECT

【讨论】:

    【解决方案3】:

    UNION ALL 是最终解决方案。

    SELECT * FROM dbtable WHERE `USERNAME` LIKE '$variable' UNION ALL 
    SELECT * FROM dbtable_01_04_2017 WHERE `USERNAME` LIKE '$variable' UNION ALL 
    SELECT * FROM dbtable_01_07_2017 WHERE `USERNAME` LIKE '$variable' UNION ALL 
    SELECT * FROM dbtable_02_09_2017 WHERE `USERNAME` LIKE '$variable' UNION ALL 
    SELECT * FROM dbtable_03_06_2017 WHERE `USERNAME` LIKE '$variable' UNION ALL 
    SELECT * FROM dbtable_05_08_2017 WHERE `USERNAME` LIKE '$variable' UNION ALL 
    SELECT * FROM dbtable_06_05_2017 WHERE `USERNAME` LIKE '$variable' UNION ALL 
    SELECT * FROM dbtable_08_04_2017 WHERE `USERNAME` LIKE '$variable'
    

    我能够通过使用上面的 SQL 查询来实现我所需要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多